gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:02 24 4
gpt4 key购买 nike

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

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

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

每次运行脚本后,脚本不会返回到命令提示符。您必须按 Enter 或 ctrl + c 才能返回到命令提示符。

有没有办法自动执行,以便我可以从脚本中获取返回值来决定脚本运行正常还是失败。

谢谢。

最佳答案

这里可能发生的情况是,您的脚本正在将二进制数据打印到 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 输出,该输出以回车符结束。回车符会将光标移动到您已写入的行的开头,以便显示提示。

顺便说一下:

关于Linux Shell 脚本已执行但未返回命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com