cat grep を使用してファイルに文字列があることを確認します。

cat grep を使用してファイルに文字列があることを確認します。

皆さん、こんにちは

目的:ファイルに文字列があることを確認し、それに応じてジョブを実行します。

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実行できる場合:grepcat

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-qgrep静かにして終了状態を介してtrue / false状態のみを返し、標準出力には何も出力しないように指示します。

sudoers構成には、この方法では考慮されない他の構成ファイルを含めることができます。ユーザーが属するグループに付与された権限も同様です。

を使用したい場合がありますsudo -lU "$USER"

関連情報