ash*_*ays 16 command-line shell scripting
我知道我可以运行以下命令
ls Some{File,Folder}
Run Code Online (Sandbox Code Playgroud)
它相当于运行这个:
ls SomeFile SomeFolder
Run Code Online (Sandbox Code Playgroud)
(我也经常用它来做类似的事情mv place_{a,b}
)
但是,我想知道是否有其他快捷方式可以执行以下操作:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
Run Code Online (Sandbox Code Playgroud)
我只需要打字run-command --a --whole --lot --of --flags parameter {a,b}
或类似的东西。
njs*_*jsg 15
假设您使用的是 GNUbash
或类似的东西:
也许是一个for
循环?
for x in a b
do
run-command --a --whole --lot --of --flags parameter $x
done
Run Code Online (Sandbox Code Playgroud)
也可以写成一行 for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done
如果您不编写此脚本并且只想在命令行上轻松运行它,那么该xargs
命令可能就是您要查找的内容。
xargs 将从标准输入中获取一堆内容,并将其用作命令的参数,如果需要,多次运行该命令。
请尝试以下操作:
echo -n parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags
Run Code Online (Sandbox Code Playgroud)
Echo 的-n
标志避免打印尾随换行符(在传递参数时导致某些命令出现问题)。
在这个例子中,你只是给 xargs 你希望它运行的排列。
-n 1
告诉 xargs 每次运行只使用 1 个参数的标志。
该-d ,
标志告诉 xargs 在输入中查找“,”作为要运行的参数之间的分隔符。(请注意,如果参数中有一个“,”,您需要将其更改为其他内容。如果您的参数中没有空格,则可以完全省略此标志。)
查看man xargs
更多信息。
您还可以使用一个函数,该函数不限制您在最后更改参数:
runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }
runcom a
runcom b
Run Code Online (Sandbox Code Playgroud)