我有一个运行以下行之一的脚本
sudo -u $USER $SUDOCMD &>>stdout.log
sudo命令是一个实时过程,可将大量内容打印到控制台。
每次运行脚本后,脚本都不会返回到命令提示符。您必须按Enter或Ctrl + C返回到命令提示符。
有没有一种方法可以自动执行此操作,因此我可以从脚本中获取返回值,以决定脚本运行正常还是失败。
谢谢。
答案 0 :(得分:0)
这里可能发生的情况是您的脚本将二进制数据打印到TTY,而不是文本打印到标准输出/错误,这隐藏了您的提示。例如,您可以尝试以下操作:
$ PS1='\$ '
$ (printf "first line\nsecond line\r" > $(tty)) &>> output.log
第二条命令将导致两行输出,第二条命令将与您的提示符“混合”:
first line
$ cond line
您可以看到光标位于“ c”上,但是如果您开始键入,则该行的其余部分将被覆盖。以下是发生的情况:
tty
命令显示终端文件的路径,类似于“ / dev / pts / 1”。写入此文件意味着输出不会进入标准输出(通常是 链接到终端),而是直接输出到终端。printf
的输出直接进入终端,而输出日志则没有任何结果。printf
输出,该输出以回车结束。回车键会将光标移动到您已写入的行的开头,因此提示符出现在此处。顺便说一句:
&>>
重定向 标准输出和标准错误,与文件名相反。