выполнение команд последовательно в 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: Как я могу обнаружить, если предыдущая команда не удалась, а затем выйти изнутри функции?
  • Когда я пытаюсь запустить комментарий, я получаю ошибку `Команда не может быть найдена, потому что '/ usr / bin' не входит в переменную среды PATH '
  • как заменить значение вычислением в bash / sed
  • Программа BASH для удаления файлов, ожидаемое выражение Integer
  • найти наибольшие последние измененные файлы / dirA / file, / dirB / file
  • Исключение файла в цикле bash
  • Попытка генерировать случайный проход для пользователей и сохранять их в файле
  • Как я могу отсортировать этот массив чисел?
  • Bash - как использовать цикл for для последовательного запуска команд
  • Bash выполняет переменное расширение строки
  • Кажется, что Bash находится в специальном режиме
  • 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 .

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