Linux 流控制失败时退出到终端

Linux 流控制失败时退出到终端

我有一个带流控制的查询。当消息为:时,我想将脚本退出到终端HOSTNAME NOT ADDED IN /tmp/hosts EXITING,这是一条失败消息。

if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts; then
  echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]; then
  echo " HOSTNAME NOT ADDED IN /tmp/hosts EXITING"; exit
fi|tee -a /tmp/log;

我尝试了上述脚本,但失败时无法退出。我该如何修复此问题?

答案1

我认为问题在于,每当您创建管道时,shell 都会将两端放入单独的进程中,即使它不必这样做。特别是,您的if-fi语句块在与 shell 脚本本身不同的进程中运行,因此您的exit语句只是终止了该if块(无论如何,在即将结束的位置),因此它什么也没完成。

可能有几种方法可以解决这个问题 - 可能比下面的方法更简洁 - 但我现在无法访问 *nix 系统来测试其中任何一个。一种应该有效的简单方法是使用标志文件:

exit_flag_file="/tmp/my_exit.$$"
rm –f "$exit_flag_file"
if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts
then
    echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]
then
    echo " HOSTNAME NOT ADDED IN /tmp/hosts; EXITING"
    > "$exit_flag_file"
fi | tee -a /tmp/log
if [ -f "$exit_flag_file" ]
then
    exit
fi

相关内容