我正在使用Linux。我希望计算机在程序完成后使用mutt
向我发送电子邮件(学校不允许我们使用mail
)。 我尝试了mutt
,但效果很好。
我使用以下shell脚本来运行程序
cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt;
如何在程序完成后向我发送电子邮件。电子邮件应该有
The job /home/program/K_10/program_1.R is finished
。另外,如果有可能,您可以帮我附上/home/program/K_10/program_1.txt
,这是program_1.R
的结果吗?
我对Linux很新。
答案 0 :(得分:0)
你需要的就是这样:
cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt;
echo "The job /home/program/K_10/program_1.R is finished" |mutt "your@email" -s "Your job"
即,在脚本中首先执行作业,然后(按顺序)向自己发送邮件。 echo
命令管道导入mutt
,它将其用作邮件的内容。 -s
选项设置邮件的主题。
更好的方法是将命令的要点放入脚本中,如下所示:
#!/bin/sh
cd $(dirname $1) && nohup Rscript $(basename $1) > $(basename $1 .R)_out.txt;
echo "The job $1 is finished" |mutt "your@email" -s "Your job"
和(调用该文件run-job
),通过
run-job /home/program/K_10/program_1.R
稍微分解一下:
run-job
被命名为暗示脚本的功能。脚本名称没有设置约定(由开发人员决定)。有些人在名称上使用".sh"
后缀使其类型更明显,但这并不重要。".R"
后缀是另一种命名约定,但Rscript
可能需要。无论如何,它都是现有文件名的一部分。$1
是指定给脚本的参数(或参数)。更完整的脚本可能会检查(a)参数是否存在以及(b)参数是否与现有文件相对应,但省略这些步骤以保持简单。$(dirname $1)
返回/home/program/K_10
和$(basename $1 .R)
接受/home/program/K_10/program_1.R
并返回program_1
。 nohup
在这里很尴尬;我会把它从脚本中删除。然后,您可以直接控制脚本的运行方式,例如,
nohup run-job /home/program/K_10/program_1.R &
创建run-job
等脚本时,您应该记得这样做:
chmod u+x run-job
将脚本放在$PATH
上的目录中(例如许多系统上的$HOME/bin
),或者注意使用其路径调用它。例如,如果它在当前目录中,您只需执行
nohup ./run-job /home/program/K_10/program_1.R &
为了隔离问题(我的拼写错误或其他原因),shell提供 trace 功能(实际命令将在运行时打印)。要打开跟踪,请将脚本的第一行更改为
#!/bin/sh -x