
皆さんこんにちは
目的: ファイル内に文字列が存在するかどうかを確認し、それに応じてアクションを実行する
if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"
行が存在する場合と存在しない場合の両方において、出力には常に「行が存在します、スキップしています」と表示されます。
出力を変数(例:x)に追加し、if文の行を変数に置き換えると正しい出力が生成されます。
変数ルートを「スキップ」してコマンドを直接実行するにはどうすればよいですか?
答え1
grep
条件コマンドとして使用できます。パターンが一致すると true を返します。ここでは、固定文字列検索 ( -F
) と、おそらく完全な行 ( -x
) での一致が必要です。
if sudo cat /etc/sudoers |
grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
echo found
else
echo not found
fi
または、構成により次のコマンドに加えてsudoers
次のコマンドを実行できる場合:grep
cat
if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
echo found
else
echo not found
fi
-q
grep
終了ステータスを介して true/false ステータスを返すだけで、stdout には何も出力しないように指示します。
sudoers 設定には、このアプローチでは考慮されない他の設定ファイルが含まれる場合があることに注意してください。ユーザーがメンバーであるグループに付与される権限についても同様です。
代わりにを使用することをお勧めしますsudo -lU "$USER"
。