Пытается удалить знак # из одной строки в файле. В настоящее время строка
#/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 правильно или что? Я довольно новичок в этом.
Я предлагаю вам сначала протестировать флаг 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
(Я удалил пробелы вокруг шаблона, так как ваш образец текста не имеет их).
Я предлагаю вам сначала протестировать флаг 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
(Я удалил пробелы вокруг шаблона, так как ваш образец текста не имеет их).