Сценарий Bash с меньшими скриптами внутри

У меня была та же проблема, и на самом деле то, что помогло мне, было противоположностью того, что люди заявляют.

INstall Compiz с плагинами В составном UNCHECK обнаруживается частота кадров + непрямые полноэкранные окна. Дайте мне знать, если это поможет.

4
задан 21 August 2017 в 22:30

12 ответов

Правильное решение для вас зависит от того, что вы хотите:

Объединение скриптов с && будет выполнять только второй, если первый из них успешно завершится. Сочетание скриптов с || будет выполнять только второй если первый не сработает успешно

Если вы хотите, чтобы вторая команда выполнялась после первого, независимо от того, успешно ли она завершается или нет, вы можете использовать либо ;, либо & wait:

bash script1.sh ;
bash script2.sh & wait
bash script3.sh
7
ответ дан 22 May 2018 в 19:13
  • 1
    Семитомия работала для меня и, по-видимому, была самым простым решением. Спасибо! – Louis 21 August 2017 в 23:37

Правильное решение для вас зависит от того, что вы хотите:

Объединение скриптов с && будет выполнять только второй, если первый из них успешно завершится. Сочетание скриптов с || будет выполнять только второй если первый не сработает успешно

Если вы хотите, чтобы вторая команда выполнялась после первого, независимо от того, успешно ли она завершается или нет, вы можете использовать либо ;, либо & wait:

bash script1.sh ; bash script2.sh & wait bash script3.sh
7
ответ дан 18 July 2018 в 08:08

Правильное решение для вас зависит от того, что вы хотите:

Объединение скриптов с && будет выполнять только второй, если первый из них успешно завершится. Сочетание скриптов с || будет выполнять только второй если первый не сработает успешно

Если вы хотите, чтобы вторая команда выполнялась после первого, независимо от того, успешно ли она завершается или нет, вы можете использовать либо ;, либо & wait:

bash script1.sh ; bash script2.sh & wait bash script3.sh
7
ответ дан 24 July 2018 в 19:01

Вы можете попробовать найти сценарии

#!/bin/bash
. script1.sh
. script2.sh
. script3.sh

Если есть переменные, которые должны быть удалены после каждого скрипта, заключите его в круглые скобки, то есть

#!/bin/bash
(
    . script1.sh
)
(
    . script2.sh
)
(
    . script3.sh
)

. Другая возможность для прямого вызова сценариев:

#!/bin/bash
./script1.sh
./script2.sh
./script3.sh

Если вы хотите, чтобы все фоновые процессы, порожденные скриптами, завершались, добавьте wait, чтобы дождаться их

, например

./script1.sh
wait
./script2.sh

Ваше текущее решение работает одновременно, поскольку bash открывает новую оболочку и выполняет это

3
ответ дан 22 May 2018 в 19:13
  • 1
    Я не понимаю вашу точку зрения на фигурные скобки. Они ограничивают блок кода. Может быть, вы думаете о круглых скобках, которые ограничивают блок кода и , открывают подоболочку? – wjandrea 21 August 2017 в 22:43
  • 2
    @wjandrea Я только что проверил. Ты прав. Я должен думать о синтаксисе Си – AvdnhracNTAd9ex 21 August 2017 в 22:51

Сделайте это так.

bash script1.sh && bash script2.sh && bash script3.sh

Или так:

bash script1.sh &&
bash script2.sh &&
bash script3.sh

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

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

bash script1.sh ; bash script2.sh ; bash script3.sh
1
ответ дан 22 May 2018 в 19:13
  • 1
    Итак, как насчет того, что сценарий не успешно завершил , но, тем не менее, хотите, чтобы следующий (-ы) был выполнен? – dessert 21 August 2017 в 22:19
  • 2
    Одна длинная строка может быть уродливой и неясной с длинными дорожками и т. Д. - где можно добавить разрывы строк? – dessert 21 August 2017 в 22:20
  • 3
    @dessert см. обновление, также когда пользователь хочет выполнить следующий скрипт, как только сначала будет успешно завершен или нет, вместо использования &&, он / она может использовать || – αғsнιη 21 August 2017 в 22:24
  • 4
    || будет только выполнить следующую команду (ы), если предыдущий не будет успешно завершен, но не существует способа объединить оба? – dessert 21 August 2017 в 22:31
  • 5
    @dessert correction ; not || приведет к выполнению следующей команды, если сначала вышел из строя или не удался – αғsнιη 21 August 2017 в 22:43

Добавьте set -e в начало всех скриптов. Когда эта опция включена, любая сбой команды приведет к сбою всего сценария, например, что произойдет, если команды будут разделены «& amp; & amp;». spec

«большинство сценариев берут входные данные из выходных файлов предыдущего», похоже на то, что означает make. Подумайте об этом.

0
ответ дан 22 May 2018 в 19:13

Вы можете попробовать найти сценарии

#!/bin/bash . script1.sh . script2.sh . script3.sh

Если есть переменные, которые должны быть удалены после каждого скрипта, заключите его в круглые скобки, то есть

#!/bin/bash ( . script1.sh ) ( . script2.sh ) ( . script3.sh )

. Другая возможность для прямого вызова сценариев:

#!/bin/bash ./script1.sh ./script2.sh ./script3.sh

Если вы хотите, чтобы все фоновые процессы, порожденные скриптами, завершались, добавьте wait, чтобы дождаться их

, например

./script1.sh wait ./script2.sh

Ваше текущее решение работает одновременно, поскольку bash открывает новую оболочку и выполняет это

3
ответ дан 18 July 2018 в 08:08

Добавьте set -e в начало всех скриптов. Когда эта опция включена, любая сбой команды приведет к сбою всего сценария, например, что произойдет, если команды будут разделены «& amp; & amp;». spec

«большинство сценариев берут входные данные из выходных файлов предыдущего», похоже на то, что означает make. Подумайте об этом.

0
ответ дан 18 July 2018 в 08:08

Сделайте это так.

bash script1.sh && bash script2.sh && bash script3.sh

Или так:

bash script1.sh && bash script2.sh && bash script3.sh

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

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

bash script1.sh ; bash script2.sh ; bash script3.sh
1
ответ дан 18 July 2018 в 08:08

Вы можете попробовать найти сценарии

#!/bin/bash . script1.sh . script2.sh . script3.sh

Если есть переменные, которые должны быть удалены после каждого скрипта, заключите его в круглые скобки, то есть

#!/bin/bash ( . script1.sh ) ( . script2.sh ) ( . script3.sh )

. Другая возможность для прямого вызова сценариев:

#!/bin/bash ./script1.sh ./script2.sh ./script3.sh

Если вы хотите, чтобы все фоновые процессы, порожденные скриптами, завершались, добавьте wait, чтобы дождаться их

, например

./script1.sh wait ./script2.sh

Ваше текущее решение работает одновременно, поскольку bash открывает новую оболочку и выполняет это

3
ответ дан 24 July 2018 в 19:01
  • 1
    Я не понимаю вашу точку зрения на фигурные скобки. Они ограничивают блок кода. Может быть, вы думаете о круглых скобках, которые ограничивают блок кода и , открывают подоболочку? – wjandrea 21 August 2017 в 22:43
  • 2
    @wjandrea Я только что проверил. Ты прав. Я должен думать о синтаксисе Си – AvdnhracNTAd9ex 21 August 2017 в 22:51

Добавьте set -e в начало всех скриптов. Когда эта опция включена, любая сбой команды приведет к сбою всего сценария, например, что произойдет, если команды будут разделены «& amp; & amp;». spec

«большинство сценариев берут входные данные из выходных файлов предыдущего», похоже на то, что означает make. Подумайте об этом.

0
ответ дан 24 July 2018 в 19:01

Сделайте это так.

bash script1.sh && bash script2.sh && bash script3.sh

Или так:

bash script1.sh && bash script2.sh && bash script3.sh

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

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

bash script1.sh ; bash script2.sh ; bash script3.sh
1
ответ дан 24 July 2018 в 19:01
  • 1
    Итак, как насчет того, что сценарий не успешно завершил , но, тем не менее, хотите, чтобы следующий (-ы) был выполнен? – dessert 21 August 2017 в 22:19
  • 2
    Одна длинная строка может быть уродливой и неясной с длинными дорожками и т. Д. - где можно добавить разрывы строк? – dessert 21 August 2017 в 22:20
  • 3
    @dessert см. обновление, также когда пользователь хочет выполнить следующий скрипт, как только сначала будет успешно завершен или нет, вместо использования &&, он / она может использовать || – αғsнιη 21 August 2017 в 22:24
  • 4
    || будет только выполнить следующую команду (ы), если предыдущий не будет успешно завершен, но не существует способа объединить оба? – dessert 21 August 2017 в 22:31
  • 5
    @dessert correction ; not || приведет к выполнению следующей команды, если сначала вышел из строя или не удался – αғsнιη 21 August 2017 в 22:43

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

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