Linux Shell脚本已执行但未返回命令提示符

时间:2019-03-07 00:37:40

标签: linux bash shell

我有一个运行以下行之一的脚本

sudo -u $USER $SUDOCMD &>>stdout.log

sudo命令是一个实时过程,可将大量内容打印到控制台。

每次运行脚本后,脚本都不会返回到命令提示符。您必须按Enter或Ctrl + C返回到命令提示符。

有没有一种方法可以自动执行此操作,因此我可以从脚本中获取返回值,以决定脚本运行正常还是失败。

谢谢。

1 个答案:

答案 0 :(得分:0)

这里可能发生的情况是您的脚本将二进制数据打印到TTY,而不是文本打印到标准输出/错误,这隐藏了您的提示。例如,您可以尝试以下操作:

$ PS1='\$ '
$ (printf "first line\nsecond line\r" > $(tty)) &>> output.log

第二条命令将导致两行输出,第二条命令将与您的提示符“混合”:

first line
$ cond line

您可以看到光标位于“ c”上,但是如果您开始键入,则该行的其余部分将被覆盖。以下是发生的情况:

  1. 您按下 Enter 来运行命令,因此光标向下移动了一行。
  2. tty命令显示终端文件的路径,类似于“ / dev / pts / 1”。写入此文件意味着输出不会进入标准输出(通常是 链接到终端),而是直接输出到终端。
  3. 子shell(类似于在shell脚本中运行命令)可确保第一个重定向不会被第二个重定向覆盖。因此printf的输出直接进入终端,而输出日志则没有任何结果。
  4. 终端现在继续打印printf输出,该输出以回车结束。回车键会将光标移动到您已写入的行的开头,因此提示符出现在此处。

顺便说一句: