如何在终端中运行后台命令时隐藏 PID 和退出状态

Dig*_*ger 1 bash terminal io-redirection

我有一个有一百多行的文本文件,每一行都是一个sh命令:

echo foo
...
echo bar
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个可以从终端调用的sh命令,该终端将从与指定行号关联的所述文件运行该命令。我不希望终端显示通常与终端中运行的命令关联的与系统相关的内容。

例如,如果我使用类似的东西xdotool type "$(sed -n 1p file)" &(请注意,我愿意接受更优雅的命令),

我得到以下终端输出:

[1] 9531
user@host:~$ echo foo
Run Code Online (Sandbox Code Playgroud)

我想压制这条[1] 9531线。但请记住,我不希望抑制回显条线,因为这是我有机会验证我是否要执行所需命令而不是其他命令的地方。我也不希望命令提示符左侧显示任何文本。

然后我按下键盘上的 <Enter> 键并得到

foo
[1]+  Done                    xdotool type "$(sed -n 1p file)" &
user@host:~$
Run Code Online (Sandbox Code Playgroud)

我想压制这条[1]+ Done...线。

如何抑制这两条线的终端输出?我已经尝试了所有我能找到的重定向方案,但没有任何乐趣。

Hob*_*ber 5

为了简化起见,您所看到的是在后台运行命令(&符号)时的正常输出。如果运行这个简化版本,人们可以看到相同的结果:

ls &
Run Code Online (Sandbox Code Playgroud)

为了避免看到该输出,您可以用括号将命令括起来:

(ls &)
Run Code Online (Sandbox Code Playgroud)

或者,就你而言

(xdotool type "$(sed -n 1p file)" &)
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,您似乎并不真正需要&,因此从命令中删除它可能会更容易:

xdotool type "$(sed -n 1p file)"
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯

如果您想从头到尾顺序运行所有文件,您可能更喜欢执行类似的操作

x=0
Run Code Online (Sandbox Code Playgroud)

然后,对于每一行,运行

x=$((x+1)); (xdotool type "$(sed -n "${x}p" file)" &)
Run Code Online (Sandbox Code Playgroud)

这样就不需要每次都修改号码了。

另请参阅: How to Interactively run all Commands in a file