сценарий оболочки, чтобы прокомментировать или раскомментировать тестирование линии

Пытается удалить знак # из одной строки в файле. В настоящее время строка

#/usr/bin/tvservice -o if [[ '$grep tvservice /etc/rc.local' =~ ^# ]] ; then sed -i '/^#.* tvservice /s/^#//' /etc/rc.local ; else echo 1 fi

Пытается проверить, будет ли эта команда работать, прежде чем я добавлю ее в скрипт. Когда я запускаю его, я получаю символ > и должен прекратить выполнение с помощью Ctrl + C

Я не передаю строку в grep правильно или что? Я довольно новичок в этом.

2
задан 24 February 2018 в 19:11

2 ответа

Я предлагаю вам сначала протестировать флаг sed -i - или использовать локальную копию файла rc.local.

Вам не нужно проверять наличие строки, но если вы это сделаете , тогда правильный способ заменить вывод grep будет "$(grep tvservice /etc/rc.local)" - способ, которым вы его написали, проверяет литералную строку $grep tvservice /etc/rc.local

Однако лучший способ ИМХО был бы grep для всего шаблона и используйте статус выхода grep напрямую, избегая проверки регулярного выражения оболочки:

if grep -q '^#.*tvservice' /etc/rc.local; then sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local else echo 1 fi

(Я удалил пробелы вокруг шаблона, так как ваш образец текста не имеет их).

3
ответ дан 17 July 2018 в 20:05

Я предлагаю вам сначала протестировать флаг sed -i - или использовать локальную копию файла rc.local.

Вам не нужно проверять наличие строки, но если вы это сделаете , тогда правильный способ заменить вывод grep будет "$(grep tvservice /etc/rc.local)" - способ, которым вы его написали, проверяет литералную строку $grep tvservice /etc/rc.local

Однако лучший способ ИМХО был бы grep для всего шаблона и используйте статус выхода grep напрямую, избегая проверки регулярного выражения оболочки:

if grep -q '^#.*tvservice' /etc/rc.local; then sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local else echo 1 fi

(Я удалил пробелы вокруг шаблона, так как ваш образец текста не имеет их).

3
ответ дан 23 July 2018 в 20:49
  • 1
    Мех, на минуту быстрее меня ... – Byte Commander 24 February 2018 в 19:25
  • 2
    Я выполнил команду в этой форме и получаю 2 в качестве вывода, а затем ничего. Он действительно не выходит из сценария должным образом, никаких подсказок? если grep -q '^ # / * tvservice' /etc/rc.local; затем echo 1 sed -i '/^#.*tvservice/ s / ^ # //' /etc/rc.local else echo 2 sed -e '/ tvservice / s / ^ # * / # /' fi – Kylar Stern 24 February 2018 в 23:29
  • 3
    Это состояние файла в настоящее время {code} #! / Bin / sh -e # # rc.local # # Этот скрипт выполняется в конце каждого многоуровневого уровня запуска. # Убедитесь, что сценарий будет «выйти 0». на успех или любое другое значение # при ошибке. # # Чтобы включить или отключить этот скрипт, просто измените биты выполнения #. # # По умолчанию этот скрипт ничего не делает. #Disable HDMI # / usr / bin / tvservice -o exit 0 {code} – Kylar Stern 24 February 2018 в 23:33
  • 4
    Я видел для второго sed, я не дал ему файл для редактирования. Исправлена ​​ошибка, когда команда запускалась и выходила, но я получаю «2». как выход еще, что означает, что он пропускает "then" где он должен удалить # из этой строки. – Kylar Stern 24 February 2018 в 23:46

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

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