скрипт оболочки для закомментирования или раскомментирования строки - тестирование

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

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

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

. правильно или как? Я довольно новичок в этом.

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

1 ответ

Я предлагаю, чтобы Вы протестировали без sed's -i флаг сначала - или использование локальная копия rc.local файл.

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

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

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

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

3
ответ дан 2 December 2019 в 02:44

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

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