выполнение команд последовательно в bash

Следующий bash позволяет запускать команды 1,2,3 во всех папках с именами, включенными в файл «list.txt»,

#!/bin/bash cat list.txt | while read i do command1 & command2 & command3 & done 

Команды 1,2,3 в коде объединены во всех папках с именами, включенными в файл «list.txt». Как команды могут запускаться один за другим во всех папках (т.е. когда первая команда заканчивает второй запуск команды и т. Д.). Я пытался использовать «wait» между командами, но это не сработало! Решение, предлагаемое здесь. Выполнение команд consequtively по нескольким папкам не сработало! Я ищу другое решение

  • Как получить новую строку перед вызовом bash?
  • bash: Источник: команда не найдена
  • bash: присвоение первой строке переменной переменной
  • получить приблизительный размер каталога (рекурсивно, включая все файлы и подкаталоги)
  • Есть ли способ использовать подстановку параметров для запуска одного завитка на двух разных серверах?
  • Bad Substition как заставить / bin / bash как оболочку?
  • Почему я должен использовать $ вместо $ ((EXPR))?
  • Функция Bash - exec для запуска программ
  • 4 Solutions collect form web for “выполнение команд последовательно в bash”

     while read -ri #read directory as a raw line do cd "$i" #cd into the directory command1 #run the commands consecutively command2 command3 cd - #cd back done < list.txt 

    Если вы хотите запустить все каталоги одновременно (с командой 1 через 3, оставаясь последовательной), замените:

      command1 command2 command3 

    с

      ( command1 command2 command3 )& 

    Если вы просто хотите запустить их последовательно, но все еще в фоновом режиме, и вам не нужно возвращать значение каждой команды, вы можете сделать это:

     #!/bin/bash cat list.txt | while read i do { command1; command2; command3; } & done 

    Если вы хотите, чтобы command2 запускался, если command1 была успешной, вы можете использовать && :

     #!/bin/bash cat list.txt | while read i do command1 && command2 && command3 & done 

    Если вы хотите запускать все синхронно и на переднем плане, просто удалите & allogether:

     #!/bin/bash cat list.txt | while read i do command1 command2 command3 done 

    Удалите & чтобы следующая команда была выполнена после завершения предыдущего.

    Если вы хотите, чтобы остальные команды выполнялись только в том случае, если предыдущие выполнялись, то оператор && – это путь.

     command 1 && command 2 && command 3 

    то command 2 будет выполняться только в том случае, если command 1 возвращает 0 (это успешно), а command 3 будет выполняться только в том случае, если command 2 возвращает 0. И это означает, что command 2 ждет завершения command 1 .

    Interesting Posts

    Установка переключаемых графических драйверов на Linux Mint

    bash и env: что-то: разрешение отклонено

    как работает команда времени

    Является ли этот сумасшедший vim voodoo (увеличение альфа-регистров) возможным внутри макроса?

    Как установить настройки YUM в Kickstart?

    uniq и bash для цикла, не записывающего в stdout перед закрытием stdin (для системы уведомлений посетителей в одной строке)

    Создайте Wifi Hotspot для совместного использования прокси SOCKS на сервере Ubuntu

    RHEL: FDE без пароля – загрузка с ключа на раздел

    Может ли профиль терминала Gnome использовать UTF-8 по умолчанию?

    Как настроить LinuxMint 17 для вызова команд с помощью мыши?

    Сортировка некоторых строк в файле

    Могу ли я использовать символическую ссылку в качестве службы systemd?

    Предоставляет ли POSIX sh пустой составной список в первом условии и пустое условие в случае условной конструкции?

    Запрос состояния питания дисплея в Linux (Xorg) в командной строке

    Не удается подключиться к серверу Windows с помощью rdesktop – ошибка «Отсутствие действительной лицензии»

    Linux и Unix - лучшая ОС в мире.