我想运行这个命令:
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