Shell

使用不同的參數重新執行相同的命令

  • September 11, 2020

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

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}或類似的東西。

假設您使用的是 GNUbash或類似的東西:

也許是一個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

如果您沒有編寫腳本而只是想在命令行上輕鬆執行它,那麼該xargs命令可能就是您正在尋找的。

xargs 將從標準輸入中獲取一堆內容,並將其用作命令的參數,並在需要時多次執行該命令。

嘗試以下操作:

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

Echo 的-n標誌避免列印尾隨的換行符(在傳遞參數時導致某些命令出現問題)。

在此範例中,您只是為 xargs 提供了您希望它執行的排列。

-n 1告訴 xargs 每次執行只使用 1 個參數的標誌。

-d ,標誌告訴 xargs 在輸入中查找“,”作為要執行的參數之間的分隔符。(請注意,如果參數中包含“,”,則需要將其更改為其他內容。如果參數中沒有空格,則可以完全省略此標誌。)

有關man xargs更多資訊,請參閱。

引用自:https://unix.stackexchange.com/questions/60781