0

ファイル引数のパーミッションを読み取るのに問題があります。隠しファイルと関係があるようですが、理由はわかりません。

現在のコード:

#!/bin/bash

if [ $# = 0 ]
then
    echo "Usage ./checkPerm filename [filename2 ... filenameN]"
    exit 0
fi

for file in $@
do
    ls -l | grep $file | cut -f1 -d' '

    # Do Something

done

各入力のアクセス許可を取得できますが、隠しファイルがループを介して実行されると、すべてのファイルのアクセス許可が再出力されます。

-bash-4.1$ ll test*
-rw-r--r-- 1 user joe 0 Nov 11 19:07 test1
-r-xr-xr-x 1 user joe 0 Nov 11 19:07 test2*
-r--r----- 1 user joe 0 Nov 11 19:07 test3
-rwxr-x--- 1 user joe 0 Nov 11 19:07 test4*
-bash-4.1$ ./checkPerm test*
-rw-r--r--
-rw-r--r--
-r-xr-xr-x
-r--r-----
-rwxr-x---
-r--r-----
-rw-r--r--
-r-xr-xr-x
-r--r-----
-rwxr-x---
-bash-4.1$

ループで何が起こっているのですか?

4

2 に答える 2

1

ls -lループ内でを実行してgrepから結果を実行すると、名前に含まれているが最初に含まれていないファイルがある場合test1、それらは によって選択され、grep追加の結果が得られます。次のようにして確認できます。

ls -l | grep test

で取得した 4 つよりも多くのエントリがあることがわかりますls -l test*

ループ内では、おそらく次のものを使用する必要があります。

ls -ld "$file" | cut -d' ' -f1
于 2013-11-12T01:23:24.953 に答える