天天看點

linux 如何運作r腳本,從linux shell腳本調用Rscript

以下似乎适用于我的Ubuntu機器:

#!/bin/bash

setsid Rscript example.R > logfile.txt &

tail -f logfile.txt

以下是将SIGINT發送到wrapper.sh之前的一些相關過程:

5361 pts/10 00:00:00 bash

6994 ? 00:00:02 update-notifier

8519 pts/4 00:00:00 wrapper.sh

8520 ? 00:00:00 R

8521 pts/4 00:00:00 tail

在Ctrl C之後,您可以看到R仍然在運作,但是wrapper.sh和tail已被殺死:

5361 pts/10 00:00:00 bash

6994 ? 00:00:02 update-notifier

8520 ? 00:00:00 R

雖然附上你的Rscript […]指令&将它發送到背景,它仍然是同一個程序組的一部分,是以也接收SIGINT.

我不确定這是不是你的意圖,但是因為你正在調用tail -f,如果沒有用Ctrl c中斷,運作wrapper.sh的shell即使在R程序完成後也會繼續挂起.如果你想避免這種情況,以下應該可行,

#!/bin/bash

setsid Rscript example.R > logfile.txt &

tail --pid="$!" -f logfile.txt

“$!”是執行的最後一個背景程序的程序ID(Rscript […]調用).