如何将终端命令作为参数传递给另一个命令

如何将终端命令作为参数传递给另一个命令

我想运行这个命令:

ls -arth Test*log | tail -1

...并将其输出作为参数传递给:

open /Applications/Utilities/Console.app <previous output>

我想用一行完成所有这一切。

答案1

这就是所谓的命令替换

open /Applications/Utilities/Console.app "$(ls -arth Test*log | tail -1)"

如果您确定要替换的命令的输出不包含空格或换行符(或者如果您想提供以空格/换行符分隔的输出作为多个参数),则可以省略引号:

open /Applications/Utilities/Console.app $(ls -arth Test*log | tail -1)

答案2

这很简单

open /Applications/Utilities/Console.app `ls -arth Test*log | tail -1`

任何包含在重音符之间的命令都将在新的 bash 环境中执行,执行后退出并用其结果替换自身

如果我在我的主文件夹中执行一个带有重音符的简单“ls”命令,我会出现这样的错误:

john@ship:~$ `ls`
Desktop: command not found

这意味着 bash 尝试执行返回值,直到正确的分隔符作为命令

这里还有一个例子来阐明这种黑客技术:

john@ship:~$ `echo "ls -l"`
total 36
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Desktop
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Documents
drwxr-xr-x 2 john john 4096 Aug  2 22:04 Downloads
drwxr-xr-x 7 john john 4096 Aug  2 19:28 Music
drwxr-xr-x 2 john john 4096 Aug  2 10:49 Pictures
drwxrwxr-x 3 john john 4096 Jul 28 22:21 Projects
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Public
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Templates
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Videos

相关内容