Wiem, że mogę uruchomić następujące polecenie
ls Some{File,Folder}
Jest to równoważne z uruchomieniem tego:
ls SomeFile SomeFolder
(Często używam tego do takich rzeczy mv place_{a,b}
)
Zastanawiałem się jednak, czy istnieje inny skrót, w którym mógłbym zrobić coś takiego:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
I musiałem tylko pisać run-command --a --whole --lot --of --flags parameter {a,b}
lub coś podobnego.
shell
command-line
scripting
popioły
źródło
źródło
run-command
, że wiele poleceń uniksowych obsługuje kilka argumentów plików w sekwencji.Odpowiedzi:
Zakładając, że używasz GNU
bash
lub czegoś podobnego:Być może
for
pętla?który można również zapisać w jednym wierszu jako
for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done
źródło
for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
{a..z}
,*.pdf
,$(find ...)
...;
następującegodo
słowa kluczowego.;
.Jeśli nie piszesz tego w skrypcie i chcesz po prostu uruchomić go z łatwością w wierszu poleceń,
xargs
polecenie prawdopodobnie jest tym, czego szukasz.xargs weźmie zawartość ze standardowego wejścia i użyje jej jako argumentów dla polecenia, uruchamiając to polecenie wiele razy w razie potrzeby.
Spróbuj wykonać następujące czynności:
W tym przykładzie po prostu podajesz xargs permutacje, które chcesz uruchomić.
Flaga „-n 1” mówi xargsowi, aby używał tylko 1 argumentów na uruchomienie.
Flaga „-d” informuje xargs, aby szukał „” na wejściu jako separatora między argumentami do uruchomienia. (Zauważ, że jeśli argument zawiera „,”, musisz zmienić to na coś innego. Jeśli twoje argumenty nie zawierają spacji, możesz całkowicie pominąć tę flagę.)
Zobacz
man xargs
więcej informacji.źródło
Możesz także użyć funkcji, która nie ogranicza cię do zmiany argumentu na końcu:
źródło
Możesz wykonać zamiany w poprzednim poleceniu. To nie zadziała z twoim przykładem {a, b}, ponieważ wszystkie wystąpienia „a” zostaną zastąpione przez „b". Ale wyobraź sobie, że chcesz wykonać następujące polecenia:
Możesz to zrobić za pomocą
Bash dokona podstawienia i uruchomi się
Użyj gs (podstawienie globalne), aby wykonać kilka podstawień, nie tylko jedno.
źródło
W
alias
bash znajduje się polecenie:Wykorzystanie jest:
$ shotcommand a
źródło