Bash脚本在完成后不会退出

时间:2015-03-17 17:37:42

标签: bash redirect output tee

首先,免责声明:我对此很新。

我正在尝试为作业编写一个简单的bash脚本。我需要将日期,手指和正常运行时间的输出打印到stdout和文件。从我正在阅读的内容来看,退出失败似乎是因为进程在子shell中运行,但从阅读开始,我真的不明白如何去做。我发现使用管道和通过T恤输入重定向给了我想要的结果,但它不会退出。除了管道,特别是打字:|每行上的T恤Time_Script_Output.txt看起来非常低效,我正在寻找一种更简洁的方式来编写脚本。

代码:

#! /bin/bash

bash 
/bin/date | tee Time_Script_Output.txt &
/usr/bin/finger | tee Time_Script_Output.txt &
/usr/bin/uptime | tee Time_Script_Output.txt 

exit

谢谢! 尼克卡瓦纳

1 个答案:

答案 0 :(得分:2)

第一条bash行不正确。假设您手动运行此脚本(bash script.sh),则每次脚本运行时都会进入 new bash会话。查看echo $SHLVL的输出,了解您已经走了多远(也是ps faxww的输出)。删除该行。

您可能也不希望在后台运行前两个管道,您希望命令运行并在下一个命令运行之前写入输出,否则您可能会在输出中遇到排序问题。 / p>

最后,您也不需要明确的exit。该脚本会在自动结束时退出。

您可以使用{}分组仅使用一次管道:

#!/bin/bash

{
/bin/date
/usr/bin/finger
/usr/bin/uptime
} | tee Time_Script_Output.txt