1

-e /sudoers.tmp -o "$(pidof visudo)"次のコード スニペットで何が行われているかを理解しようとしています。

#!/bin/bash

if [ -e /etc/sudoers.tmp -o "$(pidof visudo)" ]; then 
  echo "/etc/sudoers busy, try again later"
  exit 1
fi

cp /etc/sudoers /etc/sudoers.bak
cp /etc/sudoers /etc/sudoers.tmp

chmod 0640 /etc/sudoers.tmp
echo "whatever" >> /etc/sudoers.tmp
chmod 0440 /etc/sudoers.tmp

mv /etc/sudoers.tmp /etc/sudoers

exit 0

その特定の条件について詳しく説明してください。

4

2 に答える 2

4

これ:

if [ -e /etc/sudoers.tmp -o "$(pidof visudo)" ]; then 

コマンドを使用していtestます。テストの動作を確認するに-eは、実行help testして出力を確認します。

Evaluate conditional expression.

Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR.  Expressions may be unary or binary.  Unary
expressions are often used to examine the status of a file.  There
are string operators and numeric comparison operators as well.

The behavior of test depends on the number of arguments.  Read the
bash manual page for the complete specification.

File operators:

  [...]
  -e FILE        True if file exists.

そのため、-e /etc/sudoers.tmpそのファイルが存在するかどうかを確認しています。

于 2012-04-24T01:48:14.587 に答える
1

[ -e /etc/sudoers.tmp -o "$(pidof visudo)" ]ファイル/etc/sudoers.tmpが存在するか、コマンドの戻り状態がpidof visudo0 でないかどうかを示します。これは、visudo実行中であることを意味します。

于 2012-04-24T01:55:46.070 に答える