Ubuntu 在gnome终端/bash中,std输出可以作为命令直接运行(解释?)吗?

Ubuntu 在gnome终端/bash中,std输出可以作为命令直接运行(解释?)吗?,ubuntu,sed,command,gnome-terminal,Ubuntu,Sed,Command,Gnome Terminal,我刚从Winows马车上下来,gnome终端和bash看起来很棒,但我不太知道如何让它做我想做的事情,(我怀疑这是可能的)。 std输出(如sed)是否可以作为命令运行? (即,作为脚本逻辑的一部分解释并运行输出。) 我正在轮询一个进程,以按时间间隔输出其状态,并且我希望将其作为一个单行程序来完成 # dd is already running in another terminal. Its PID is 1234 pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.

我刚从Winows马车上下来,gnome终端和bash看起来很棒,但我不太知道如何让它做我想做的事情,(我怀疑这是可能的)。
std输出(如sed)是否可以作为命令运行?
(即,作为脚本逻辑的一部分解释并运行输出。)
我正在轮询一个进程,以按时间间隔输出其状态,并且我希望将其作为一个单行程序来完成

# dd is already running in another terminal. Its PID is 1234
pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p'  
# this outputs: sudo watch 30 kill -USR1 1234  
是否有一些快捷终端/bash魔法可以运行
sudo watch 30 kill-usr1234

谢谢。

您应该能够用
$()
包装它:

但为什么不:

while :; do sleep 30; clear; kill -USR1 $(pgrep '^dd$'); done
将其包装在$()内$()像环境变量一样分配标准输出。单独在一行上运行printed命令

$(pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p')

只需通过管道将命令发送到
sh

pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p' | sh

因为这在某些谷歌搜索中出现的频率相对较高,我将添加这个答案

如果将``放在命令周围,那么输出将被重新路由到字符串中,If本身将作为命令运行

例如,这将运行“echo 3”:

`echo "echo 3"`
这也可以用于多个层,例如:

``echo "echo echo 3"``
将回显'3',因为第一个回显发出'echo echo 3',该回显将启动另一个回显,该回显发出'echo 3',该回显将运行

我总是使用``而不是$()或| sh/| bash,因为我个人认为它在脚本中看起来更干净。但它的工作原理几乎与$()完全相同(我不相信有任何区别,但可能有细微的区别)

可以使用$()和``而不能使用| bash的一件事是分配变量。您可以存储输出,然后在以后执行:

azdefvar="`COMMAND_THAT_OUTPUTS_COMMAND`"
以下是一个例子:

daboross@DaboUbuntu:~$ date +%T
13:09:20
daboross@DaboUbuntu:~$ azdef="`echo "date +%T"`"
daboross@DaboUbuntu:~$ echo $azdef
date +%T
daboross@DaboUbuntu:~$ $azdef
13:09:45
daboross@DaboUbuntu:~$ echo $azdef | bash
13:09:53
在上述任何情况下,都可以使用$()而不是```


在大多数键盘上,`键直接位于esc键的下方。

为什么不“while”。。。因为在寻找一种显示
dd
进度的方法时,这就是代码片段所显示的,而且我也不想冒险远离我的知识轨道(不是dd!)。。。但我认为我应该明智地听取斯塔卡特隆大师的建议……:)我会给“While”一个旋转…谢谢。。。我没意识到你可以用烟斗吹。。。很好。这一次我将使用$(),但是知道如何将管道连接到sh很好,而且它可能会在某个时候派上用场。。
daboross@DaboUbuntu:~$ date +%T
13:09:20
daboross@DaboUbuntu:~$ azdef="`echo "date +%T"`"
daboross@DaboUbuntu:~$ echo $azdef
date +%T
daboross@DaboUbuntu:~$ $azdef
13:09:45
daboross@DaboUbuntu:~$ echo $azdef | bash
13:09:53