Как предотвратить скрипт не останавливаться после apt-get?

Хорошая книга, чтобы добавить к ответу Сергея, приведена ниже. Это рекомендуемый маршрут для нового разработчика. Мир разработки Ubuntu / Linux горький. По моему мнению, большая кривая обучения, но как только вы ее узнаете, мир открыт и свободен по большей части.

Это хороший ресурс http://c.learncodethehardway.org/book/

1
задан 8 November 2013 в 09:59

3 ответа

У меня была такая же проблема, но я не был очень доволен решениями здесь или решения не работали для меня. То, что я узнал, чтобы он работает, чтобы отправить ввод NULL для APT-получить, так что она продолжает работать

Похоже, что это. :

apt-get -y install gcc g++ make cmake perl  < "/dev/null"

cd ~/
mkdir t1
cd t1

#newline

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

7
ответ дан 24 May 2018 в 15:33
  • 1
    Это очень помогло мне. Была попытка создать сценарий оболочки gist для установки и настройки общих программ и настроек среды, которые я мог бы передать в bash. Он продолжал повторять команды после apt-get isntall, и я не мог понять, почему. Спасибо! – LordZardeck 20 September 2014 в 03:12

Вы не должны копировать команды в сценарии на терминале, сценарий должен выполняться на терминале. Проблема с первым подходом заключается в том, что как только первая команда вставлена ​​вместе с новой строкой в ​​конце ее, apt-get начинает выполнение, что предотвращает вставку дополнительных команд на терминал, поэтому они не будут выполнение

Чтобы выполнить сценарий, напишите команды файлу run.sh (или любое имя, которое вы хотите) следующим образом:

#!/bin/bash
apt-get -y install gcc g++ make cmake perl

cd ~/
mkdir t1
cd t1

, а затем выполните его на terminal, введите bash run.sh или bash filename (замените имя файла на имя, которое вы дали сценарию). Первая строка этого скрипта сообщает, какую оболочку использовать, если вы запускаете скрипт напрямую (сначала выполнив его с помощью chmod +x filename), а затем запустив скрипт как /path/filename.

2
ответ дан 24 May 2018 в 15:33

apt-get иногда выходит с ненулевым кодом, даже если он установлен успешно.

И это заставляет скрипт останавливаться. Это глупость и смехотворность, но я должен это решить. Я попытался заставить его продолжить, обернув блок apt-get с помощью суб-скрипта, поэтому код выхода будет проигнорирован.

set -e

bash << +END
apt-get -y install gcc g++ make cmake perl
exit 0
+END
echo $?

cd ~/
mkdir t1
cd t1

На самом деле я ожидал, что внутри bash выйдет с ненулевым кодом - поэтому внешний скрипт завершит каскад - но это не произошло, и исполнение продолжалось.

0
ответ дан 24 May 2018 в 15:33
  • 1
    Если вы используете set -e, и хотите проигнорировать код выхода для одной команды, гораздо проще использовать форму apt-get -y install gcc g++ make cmake perl || true – Steven Kath 10 November 2013 в 02:30
  • 2
    @StevenKath Я хочу, чтобы мой скрипт продолжался только тогда, когда все пакеты готовы. Во всяком случае, это было лучшее, что я мог понять. – Eonil 10 November 2013 в 02:36
  • 3
    Таким образом, он будет продолжаться только тогда, когда apt-get будет завершен. || true использует оператор bash || (выполняется только следующее, если предыдущий код выхода был ненулевым), а затем true (выход с кодом 0). Вместе они просто превращают ненулевой код выхода в нулевой (успешный) код выхода. – Steven Kath 10 November 2013 в 02:46

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

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