ファイルの単一行から#
記号を削除しようとしています。行は現在
#/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
に正しく渡さないのですか?私はこれにかなり新しいです。
without sedの-i
フラグを最初にテストするか、rc.local
ファイルのローカルコピーを使用することをお勧めします。
文字列の存在をテストする必要はありませんが、そうする場合は、grepを置換する正しい方法outputは"$(grep tvservice /etc/rc.local)"
になります-あなたが書いた方法はリテラル文字列$grep tvservice /etc/rc.local
をテストします
ただし、IMHOのより良い方法は、パターン全体をgrepし、grepの終了ステータスを直接使用して、シェルの正規表現テストを完全に回避することです。
if grep -q '^#.*tvservice' /etc/rc.local; then
sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local
else
echo 1
fi
(サンプルテキストにスペースがないため、パターンの周りのスペースを削除しました)。