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


13

我知道我可以运行以下命令

ls Some{File,Folder}

它等效于运行此命令:

ls SomeFile SomeFolder

(我也经常将它用于mv place_{a,b}

但是,我想知道是否有其他快捷方式可以执行以下操作:

run-command --a --whole --lot --of --flags parameter a; \
     run-command --a --whole --lot --of --flags parameter b

而且我只需要打字run-command --a --whole --lot --of --flags parameter {a,b}或类似的东西。


这取决于run-command,许多Unix命令依次处理多个文件参数。
vonbrand

Answers:


13

假设您正在使用GNU bash或类似的东西:

也许是for循环?

for x in a b
do
    run-command --a --whole --lot --of --flags parameter $x
done

也可以写成一行 for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done


1
或者,如果您想运行很多东西,则可以使用bash扩展,例如for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
h3rrmiller 2013年

可能会出现以多种方式生成的空格分隔的列表。所以,是的,{a..z}*.pdf$(find ...)...
njsg

我不知道为什么我的脑子没跳起来。谢谢!这可能就是我用的。函数的想法很好,但我更喜欢。
ashays

1
单行代码仅在删除;以下do关键字后对我有用。
2016年

@jimp谢谢,我已经更改了代码以删除该代码;
njsg

5

如果您不是编写脚本的脚本,而只是想在命令行上轻松运行它,那么该xargs命令可能就是您想要的。

xargs将从标准输入中获取一堆内容,并将其用作命令的参数,并在需要时多次运行该命令。

请尝试以下操作:

echo parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags

在此示例中,您只是向xargs提供了要其运行的排列。

“ -n 1”标志告诉xargs每次运行仅使用1个参数。

“ -d”标志告诉xargs在输入中寻找“”作为运行参数之间的分隔符。(请注意,如果参数中带有“,”,则需要将其更改为其他名称。如果参数中没有空格,则可以完全省略此标志。)

请参阅man xargs以获取更多信息。


4

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

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

runcom a
runcom b

2

您可以在上一个命令中执行替换。这不适用于您的{a,b}示例,因为所有'a'实例将被替换为'b'。但是,假设您要执行以下命令:

run-command --a --whole --lot --of --parameter --format xml
run-command --a --whole --lot --of --parameter --format son

你可以做到

run-command --a --whole --lot --of --parameter --format xml
!!:s/xml/json/

Bash将进行替换并运行

run-command --a --whole --lot --of --parameter --format json

使用gs(全局替换)执行多次替换,而不仅仅是一次替换。


1

aliasbash中有命令:

$ alias shotcommand='run-command --a --whole --lot --of --flags parameter'

用法是: $ shotcommand a


如果代码稍微复杂一点,也可以使用一些函数:-)
njsg 2013年

2
仅当我更改的参数碰巧是最后一个时,此解决方案才有效,对吗?
ashays 2013年

是。你是对的。
dchirikov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.