однострочная группа команд как индивидуальная?

Я сделал один небольшой псевдоним и задал вопрос: как выполнить однострочную группу команд как команду за командой, не нарушая ее?

echo " alias get='sudo apt-get install'" >> .bashrc & bash

здесь у нас есть команды как echo & amp; Баш. даже помещая их все в одну строку, я хочу выполнить их команду за командой.

Обновление: например, если есть групповая командная строка как

command1; команда 2; команда 3; команда 4; commmand5

Тогда я хочу выполнить эту групповую команду не за один шаг. Первые 3 команды за раз, а затем следующие 2 команды. Но условие в том, что я должен написать все эти команды в одной строке.

2
задан 6 August 2013 в 20:17

4 ответа

Вы должны иметь возможность делать то, что вы имеете в виду, используя группирование команд, которое позволяет вам выполнять команды вместе, в этом случае, независимо от того, успешно они выполняются или нет, то есть в форме { cmd; cmd; }. Дополнительная информация о группировании команд и использовании & amp; & amp; и || Логические операторы доступны в Bash Wiki и в Справочное руководство Bash .

Сначала я думал, что форма, которую может принять ваша командная строка:

{ cmd1; cmd2; cmd3; }; sleep 1; { cmd4; cmd5;}

Команда сна просто дает паузу и может быть удалена.

Однако, , вы говорите, что хотите дополнительный возврат или подтверждение для последних двух команд, и, таким образом, для достижения этого вам необходимо прервать поток команд в приведенном выше примере - сон просто делает паузу, но независимо от последние две команды всегда выполняются.

Чтобы действительно остановить цепочку команд, вы можете использовать read -p....., который требует вмешательства пользователя для продолжения. Вот что вы могли бы сделать:

1) Выполнить первые три команды, затем дать пользователю возможность или не выполнять последние. Вы можете увидеть, подходит ли тот, кто я написал ниже:

Примечание : замените команду id своими собственными командами.

id; id; id; read -p "Execute final two commands? (Y/N) " ans; if [[ $ans =~ Y|y ]]; then id; id; else echo "Finished"; fi

Теперь выполняются первые три команды, а затем вам нужно нажать y и вернуться для выполнения последних двух, но все команды находятся в одной строке. Это примерно столько, сколько я могу придумать на самом деле, поскольку я не совсем уверен, что вы хотите.

0
ответ дан 6 August 2013 в 20:17

& запускает левую команду в фоновом режиме. Если вы хотите выполнить вторую команду только в том случае, если предыдущая команда была выполнена успешно, используйте

 command1 && command2

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

command1 ; command2
.
0
ответ дан 6 August 2013 в 20:17

echo "alias get = 'sudo apt-get install'" >> .bashrc & amp; bash

Просто поместите 2 амперсанда, и это работает.

0
ответ дан 6 August 2013 в 20:17

Если вы хотите запустить их последовательно, лучше всего использовать двойной амперсанд &&. Это часто используется, например, при работе sudo apt-get update && sudo apt-get upgrade.

&& требует, чтобы первая команда выполнялась успешно перед запуском второй. Таким образом, в приведенном мной примере он обновляет список пакетов, а затем обновляет пакеты, но только в том случае, если обновление прошло успешно.

Одиночный амперсанд полезен, если вы хотите потерять программу из своего терминала, чтобы программа оставалась открытой, даже если активный терминал закрыт, например, с помощью. nautilus & disown.

0
ответ дан 6 August 2013 в 20:17

Другие вопросы по тегам:

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