我正在尝试运行一个语句,其中命令的名称位于变量中。例如:
my_command='/path/to/some/command'
$my_command -f foo -b bar -s something else
但上面的方法不起作用。我收到的错误表明 shell 正在尝试将我的参数解释为命令。
我如何在 Bash 和 Zsh 中执行此操作?
答案1
要存储命令,您可以使用一个函数:
在任何类似 Bourne 的 shell 中,但是bash
:
mycommand() /path/to/some/command some fixed args "$@"
mycommand other args
在 中bash
,您需要大括号:
mycommand() { /path/to/some/command some fixed args "$@";}
(这些支架在其他外壳中不会造成伤害,因此最好在需要便携时使用它们)
如果您是一个csh
瘾君子,您也可以使用alias
.
您可以使用变量,如下所示:
mycommand=/path/to/some/command
但请记住,在除了 之外的每个 shell 中zsh
,您都需要引用扩展:
"$mycommand" its args
如果你想存储命令和超过第 0 个参数,你可以在支持它们的 shell 中使用数组(bash
并且zsh
这样做)
mycommand=(/path/to/some/command some fixed args)
"${mycommand[@]}" some other args
在zsh
你可以摆脱
$mycommand some other args
只要没有固定参数是空的。
答案2
下面这些行在 bash 下对我有用:
mycommand=/usr/bin/find
$mycommand -type d
您的问题可能源于“/path/to/some/command”以及它的作用或尝试执行的操作。没有看到实物,很难说。