皆さん、こんにちは
目的:ファイルに文字列があることを確認し、それに応じてジョブを実行します。
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状態のみを返し、標準出力には何も出力しないように指示します。
sudoers構成には、この方法では考慮されない他の構成ファイルを含めることができます。ユーザーが属するグループに付与された権限も同様です。
を使用したい場合がありますsudo -lU "$USER"
。