使用不同的参数重新运行相同的命令

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


Hob*_*dee 9

如果您不编写此脚本并且只想在命令行上轻松运行它,那么该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更多信息。


Chr*_*own 5

您还可以使用一个函数,该函数不限制您在最后更改参数:

runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }

runcom a
runcom b
Run Code Online (Sandbox Code Playgroud)