私はシェルスクリプトを学んでいて、ユーザーに「7」権限(「rwx」)を持つファイルを一覧表示するスクリプトを書いています。これまで私はこう書いています:
for F in *
do
a= $(stat -c "%a" "$F")
echo $a
if ((b==7))
then
echo $F
fi
done
ここで、aの値は「1」です。私がここで何を間違っているのか?
答え1
シェルではスペースが重要です。変える
a= $(stat -c "%a" "$F")
そして:
a=$(stat -c "%a" -- "$F")
(また、--
コマンドがで始まるファイル名に対して引き続き機能するようにオプションの区切り文字を追加します-
)
または
a=$(stat -Lc "%a" -- "$F")
シンボリックリンクには、シンボリックリンクターゲットに対する権限が必要です(ほとんどのシステムでは、シンボリックリンク自体に対する権限は関係がないため)。
はい
簡単にするために、単一のファイルstat
に対してコマンドを実行し、対話型コマンドラインでこれを行います。
$ stat -c "%a" file
660
それでは、スペースを使ってコマンドを試してみましょう。
$ a= $(stat -c "%a" file)
bash: 660: command not found
$ echo a=$a
a=
エラーメッセージが表示され、a
新しい値に設定されていません。 (あなたのようにa
beforeに割り当てられている場合は1
変更されていません1
。)今すぐ空白なしで試してみてください。
$ a=$(stat -c "%a" file)
$ echo a=$a
a=660
これはうまくいきます。 a
コマンドから返された番号に正常に設定されましたstat
。