为什么bash后端函数在其父级已死时返回失败

时间:2016-09-06 03:43:42

标签: bash nohup

即使ssh超时或终端关闭,我想让bash功能继续运行。因为我不想创建一个新的脚本文件来单独调用它,所以我使用了nohup和'&'实现目标的方法。

(
  trap "" HUP
  sleep 10
  echo 'abc123!' | sudo -S -p '' bash -c "cat /etc/shadow"
  ret=$?
  if [ $ret -ne 0 ]; then
     echo "failed-->$ret" >> /tmp/test.log
  fi
)&

以上只是我脚本的一部分,代表那些需要在其父级死后继续运行的脚本。 该脚本由非root用户运行,因此需要使用sudo来执行某些命令。 该脚本在其父级处于活动状态时成功返回。 但是当你在终端运行时关闭终端时,你将失败 - > 1"子进程退出后,在test.log文件中。 那么,任何人都可以告诉我脚本有什么问题吗?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。我解决了这个问题,但仍然不确定根本原因。 我改变了' sudo'的代码。到:

echo 'abc123!' | sudo -S -p '' cat /etc/shadow > /tmp/test.log 2>&1

可能的原因是关闭终端时,标准输出中断,需要明确分配新的标准输出。