выполнение команд последовательно в 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 по нескольким папкам не сработало! Я ищу другое решение

  • Не допускайте моргания текста / экрана при выполнении четких
  • Разница между {1,2,3} и {1..3}
  • Как определить, успешно ли выполнена команда, выполненная `exec`?
  • Как управлять циклом?
  • Избегайте того, что Ctrl-C отключает печать ввода
  • Объединение нескольких команд в одну строку
  • Можно ли указать пользовательскую команду перед запуском интерактивной сессии 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 .

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