Повторное выполнение той же команды с другим параметром

Если Вы изменяетесь между каталогами далеко в файловой системе. Я рекомендую автопереход.

13
10.01.2013, 00:37
5 ответов

Предположение, что Вы используете GNU bash или что-то подобное:

Возможно, a 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

13
27.01.2020, 19:52
  • 1
    или если у Вас есть много, Вы хотите выполнить Вас, может использовать расширение удара как так for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done –  h3rrmiller 09.01.2013, 20:11
  • 2
    , Что идет может быть разделенный список пространства, сгенерированный во многих отношениях. Так да, {a..z}, *.pdf, $(find ...)... –  njsg 09.01.2013, 20:34
  • 3
    , который я не знаю, почему мой ум не переходил к циклам.Спасибо! Это, вероятно, будет тем, что я использую. Функциональная идея хороша, но мне нравится это лучше. –  ashays 10.01.2013, 09:21
  • 4
    Острота только работала на меня после удаления ; после do ключевое слово. –  jimp 23.11.2016, 20:00
  • 5
    @jimp Благодарит, я изменил код для удаления этого ;. –  njsg 24.11.2016, 10:37

Можно также использовать функцию, которая не ограничивает Вас наличием Вашего изменяющегося аргумента в конце:

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

runcom a
runcom b
4
27.01.2020, 19:52

Существует alias команда в ударе:

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

Использование: $ shotcommand a

1
27.01.2020, 19:52
  • 1
    Существуют также функции, если код является немного более сложным :-) –  njsg 09.01.2013, 20:32
  • 2
    Это решение только работает, если мой изменяющийся параметр, оказывается, последний, корректный? –  ashays 09.01.2013, 21:41
  • 3
    Да. Вы правы. –  dchirikov 09.01.2013, 21:45

Вы можете выполнять замены в предыдущей команде. Это не сработает с вашим примером {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

Use gs (глобальная замена) для выполнения нескольких замен, а не только одной.

2
27.01.2020, 19:52

Если сеанс остается активным, то он остается активным. Там нет никаких трюков, просто буфер и TCP делает это дело.

Если соединение с ssh-сеансом потеряно, а затем восстановлено из-за «плохого» подключения к Интернету, приложение, запущенное в этом сеансе, никогда не знает. Сеанс продолжается.

Отключение монитора (при просмотре консоли) не должно влиять на приложение, запущенное на этой консоли.

-121--69302-

Но повлияет ли отключение на содержимое файла? Я думал, это не так.

Если соединение прервано, сеанс завершается, и оболочка и команда прекращаются. Вы заинтересованы в выполнении команд на удаленном сервере, даже если вы отключаетесь, вы должны искать nohup команду, экран или tmux мультиплексор или mosh для плохих оболочек соединения.

-121--69303-

Если вы не создаете сценарий и просто хотите легко запустить его в командной строке, команда 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 .

5
27.01.2020, 19:52

Теги

Похожие вопросы