Несколько команд в одной строке linux
Обновлено: 21.11.2024
Я хочу выполнять несколько команд в фоновом режиме, поэтому я хочу запускать их в bash одну за другой. Легко запустить одну команду в оболочке Linux в фоновом режиме, вот так:
Также легко запустить несколько команд, вот так:
Но если я хочу запустить несколько команд в фоновом режиме, я попробовал следующий формат команды, но безуспешно:
Оба формата не работают. Как я могу запустить несколько команд, которые имеют & в одной командной строке?
Пантера, кажется, что использование () может помочь решить эту проблему намного проще, чем использование скрипта. Давайте сначала попробуем в полной мере использовать возможности, предоставляемые самой оболочкой, вместо того, чтобы сочинять то, что мы хотим сами. Но, конечно, использование скрипта также может решить эту проблему. Все равно спасибо.
Что делать, если я хочу запустить 'tail -F >', за которым следует 'jobs -l', за которым снова следует 'disown -h %1'
2 ответа 2
Если вы хотите запускать их последовательно:
Если вы хотите, чтобы они работали параллельно:
В bash вы также можете использовать это (пробелы после < и ; обязательны):
() может помочь bash отличить & от &&. Поэтому просто используйте () для разделения исполнительного модуля, когда мы хотим использовать & и && вместе.
Полагаю, вам нужно это:
Это запускает myCommand1 и отправляет его в фоновый режим, поскольку за ним следует амперсанд, затем немедленно запускает myCommand2 и также отправляет это в фоновый режим, тем самым снова освобождая оболочку.
Для лучшего понимания вы можете заменить pipeline на command здесь.
Список — это последовательность из одного или нескольких конвейеров, разделенных одним из операторов ;, &, && или || и, возможно, завершенных одним из ;, & или .
Если команда завершается оператором управления &, оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка не ожидает завершения команды, и статус возврата равен 0. Команды, разделенные символом ; выполняются последовательно; оболочка ожидает завершения каждой команды по очереди. Статус возврата — это статус выхода последней выполненной команды.
Списки И и ИЛИ представляют собой последовательности одного или нескольких конвейеров, разделенных знаками && и || операторы управления соответственно.
Источник: man bash
Давайте разберем это на примеры. Вы можете создать список, комбинируя команды и разделяя их одним из следующих способов: ; & && || :
Вы можете завершать списки одним из следующих способов: ; & .
Обычно вы выполняете команду или список, нажимая Enter , что равно . точка с запятой; служит той же цели, особенно в сценариях. Однако Ampersand & запускает команды в подоболочке в фоновом режиме, немедленно освобождая оболочку.
Вы можете использовать круглые () или фигурные скобки <> для дальнейшей группировки списков, разница в том, что круглые скобки порождают подоболочку, а фигурные — нет. Фигурные скобки требуют пробела после первой и точки с запятой или новой строки перед закрывающей скобкой. Например:
Это может стать довольно сложным, если вы не уверены, используйте значения true и false, чтобы проверить, работает ли конструкция должным образом:
Команда jobs отображает список фоновых задач, которые выполняются или недавно были завершены в текущей оболочке. Существует ряд сочетаний клавиш и команд для управления заданиями:
- Ctrl + Z вводит символ приостановить, который приводит к остановке процесса, выполняющегося в данный момент на переднем плане. Он не завершается, а остается в списке заданий.
- Ctrl + Y вводит символ отложенной приостановки, который приводит к остановке процесса, работающего в данный момент на переднем плане, при попытке чтения ввода с терминала
fg=% выводит процесс на передний план, запуская его при необходимости, вы можете указать процесс следующим образом:
bg = %& переводит процесс в фоновый режим, запуская его при необходимости:
wait ожидает завершения фонового процесса и возвращает его статус завершения:
Представьте, что вы запустили длительный процесс (jobs показывает его номер 3), а затем понимаете, что хотите, чтобы компьютер был приостановлен после его завершения, а также выводить сообщение, если процесс завершился неудачно:
Выполнение двух или более команд в одной строке может сэкономить вам много времени и повысить эффективность и продуктивность работы в Linux.
Есть три способа запуска нескольких команд в одной строке в Linux:
Использование ; для запуска нескольких команд Linux в одной строке
Самая простая из них — точка с запятой (;). Вы просто объединяете несколько команд, которые хотите запустить, используя ; следующим образом:
Здесь сначала запускается cmd1. Независимо от того, запускается ли cmd1 успешно или с ошибкой, cmd2 запустится после него. И когда команда cmd2 завершится, запустится cmd3.
Давайте возьмем пример, который вы можете легко попрактиковать (если хотите).
В приведенной выше команде вы сначала создаете новый каталог с именем new_dir с помощью команды mkdir.Затем вы переключаетесь в этот вновь созданный каталог с помощью команды cd. Наконец, вы печатаете свое текущее местоположение с помощью команды pwd.
Пробел после точки с запятой (;) необязателен, но он делает цепочку команд легко читаемой.
Использование && для запуска нескольких команд Linux
Если вы используете дистрибутивы на основе Ubuntu или Debian, вы, должно быть, сталкивались с этой командой, использующей концепцию &&:
Здесь первая команда (sudo apt update) сначала обновляет кэш базы данных пакетов. Если ошибки нет, будут обновлены все пакеты, для которых доступны более новые версии.
Возьмем предыдущий пример. Если new_dir уже существует, команда mkdir вернет ошибку. Разница в поведении ; и && можно увидеть на скриншоте ниже:
Вы видели, как команды, разделенные символом &&, останавливались, когда первая команда приводила к ошибке?
Использование || для одновременного запуска нескольких команд Linux
Вы можете использовать логический оператор ИЛИ (||) для запуска цепочки команд, но следующая команда запускается только тогда, когда предыдущая команда завершается с ошибкой. Это противоположно тому, что вы видели с &&.
Если cmd1 завершается ошибкой, запускается cmd2. Если cmd2 выполняется успешно, cmd3 не запускается.
На снимке экрана выше команда mkdir new_dir завершается ошибкой, так как new_dir уже существует. Так как эта команда не удалась, следующая команда cd new_dir выполняется успешно. И теперь, когда эта команда выполнена успешно, следующая команда pwd выполняться не будет.
Дополнительный совет: объедините && и || операторы
Вы можете комбинировать операторы для запуска двух или более команд Linux.
Например, вы можете проверить, существует ли файл в bash, и соответствующим образом распечатать сообщения.
Выполните приведенную выше команду до и после создания файла file.txt, чтобы увидеть разницу:
Как и копирование и вставка в терминале Linux, одновременный запуск нескольких команд также является одним из многих советов командной строки Linux для экономии времени. Хотя это элементарно, это важная концепция, которую должен знать любой пользователь терминала Linux.
Вы также можете использовать ;, && и || также запускать несколько команд в сценариях bash.
Если вы используете Linux каждый день, вы знаете, что командная строка — это самый мощный инструмент при работе с файлами, установке и настройке системного программного обеспечения и его запуске. Это становится еще более эффективным, если вы одновременно запускаете две или более команд в командной строке и экономите много времени.
В этом руководстве мы увидим различные способы, с помощью которых мы можем эффективно комбинировать и выполнять несколько команд Linux в одной строке.
; | cmd1; cmd2 | «;» оператор выполняет все команды независимо от того, завершились ли неудачей предыдущие. |
&& | cmd1 && cmd2 | Оператор «&&» выполняет вторую команду, только если предыдущая команда выполнена успешно. |
|| | cmd1 || cmd2 | «||» оператор выполняет вторую команду, только если предыдущая команда возвращает ошибку. |
Позвольте мне объяснить вам более подробно, как вы можете выполнять несколько команд в Linux за один раз.
1. Использование оператора точки с запятой (;) для запуска нескольких команд Linux
Оператор точки с запятой (;) позволяет последовательно запускать одну или несколько команд, независимо от того, была ли выполнена каждая предыдущая команда успешно или нет. Например, выполните следующие три команды в одной строке, разделенные точкой с запятой (;), и нажмите Enter.
Запуск нескольких команд с использованием оператора точки с запятой
Это покажет вам список текущего каталога ( ls ), покажет, в каком каталоге вы сейчас находитесь ( pwd ), распечатает использование диска файлами ( du ) и отобразит имя для входа в вашу учетную запись ( whoami ) все на один раз.
2. Использование оператора AND (&&) для запуска нескольких команд Linux
В некоторых сценариях вы хотите убедиться, что вторая команда выполняется только в том случае, если первая команда выполнена успешно. Например, запустите две команды, разделенные оператором (&&), который равен двум амперсандам.
Здесь первая команда обновляет списки базы данных пакетов для пакетов, которые необходимо обновить. Если ошибок нет, он выполнит вторую команду, которая обновит все пакеты до более новой версии.
В большинстве случаев я настоятельно рекомендую использовать оператор (&&), а не оператор точки с запятой (;). Это гарантирует, что вы не сделаете ничего страшного.Например, если вы выполните следующую команду, чтобы перейти в каталог, а затем рекурсивно удалите все в этом каталоге, вы можете в конечном итоге разрушить свою систему, если изменение каталога не произошло.
3. Использование оператора (||) для запуска нескольких команд Linux
Иногда вам может понадобиться запустить вторую команду только в том случае, если первая команда вернет ошибку. Для этого вам нужно использовать оператор (||). Например, вы хотите проверить, существует ли каталог MyFolder, и создать его, если это не так.
В приведенном выше примере каталог MyFolder не существует, поэтому вторая команда создает каталог.
Заключение
В этой статье мы узнали о трех полезных способах, с помощью которых мы можем эффективно комбинировать и запускать несколько команд Linux в командной строке.
Как администратор Linux вы можете знать, насколько полезной может быть командная строка для работы с различными действиями, такими как установка приложения, установка системного исправления и перезапуск службы.
Одновременное выполнение двух или более команд еще более эффективно и экономит время.
В этом руководстве мы рассмотрим различные способы эффективного объединения и выполнения нескольких команд Linux.
Оператор | Синтаксис | Описание |
---|---|---|
Точка с запятой (;) | команда 1; command2 | Сначала выполнить команду 1, а затем команду 2 |
И (&&) | команду 1 && command2 | < td>Выполнять команду 2, только если команда 1 выполняется успешно|
ИЛИ (||) | команда 1 || command2 | Выполнять команду 2, только если команда 1 не удалась |
1) Объединяйте команды с помощью оператора точки с запятой (;)
Если вы хотите выполнить все команды независимо от того, завершились неудачей предыдущие или нет, разделите их точкой с запятой. Это выполняет все команды одну за другой.
Общий синтаксис:
Например: просто введите следующие три команды в одну строку, разделенные точкой с запятой. Это покажет вам имя для входа (whoami), проверит, в каком каталоге вы сейчас находитесь (pwd) и как долго работает система (время безотказной работы).
Как я уже сказал, если одна команда в цепочке команд дает сбой, остальные команды всегда будут выполняться, как показано ниже.
2) Запустите две или более команд одновременно в Linux, используя логический оператор И (&&)
Если вы хотите выполнять каждую команду только после успешного выполнения предыдущей команды, объедините их с помощью оператора ‘&&’.
Общий синтаксис:
Например: введите следующие две команды в одну строку, разделенные двумя амперсандами ( && ). Это создаст каталог под названием «MyDirectory», а затем перейдет в этот каталог.
Повторное выполнение вышеуказанной команды завершится ошибкой, поскольку «MyDirectory» уже существует. Следовательно, «команда 1» возвращает ошибку. Оператор «И» запустит «команду 2» только в том случае, если «команда 1» будет выполнена успешно.
3) Одновременное выполнение нескольких команд Linux с помощью логического оператора ИЛИ (||)
Если вы хотите запустить следующую команду только в случае сбоя предыдущей команды, соедините их с оператором «||».
Оператор «ИЛИ» выполнит «команду 2» только в том случае, если «команда 1» не удалась или вернула ошибку. Точно так же, если «команда 1» выполняется успешно, «команда 2» не выполняется.
Общий синтаксис:
Например: здесь «команда 1» выполнена успешно, потому что мы вошли в каталог «cpufetch», поэтому команда 2 «ls -lh» не выполняется.
При повторном выполнении приведенной выше команды «Команда 2» выполняется успешно, поскольку «команда 1» не удалась. Итак, мы можем перечислить содержимое каталога cpufetch.
Заключительные примечания
В этом руководстве мы показали вам различные способы эффективного объединения и выполнения нескольких команд Linux с использованием оператора точки с запятой (;), логического оператора И (&&) и логического оператора ИЛИ (||).< /p>
Читайте также: