Der `line`-Befehl auf der Unix/Linux-Bash fordert eine Information zu verweigerter Berechtigung auf

Der `line`-Befehl auf der Unix/Linux-Bash fordert eine Information zu verweigerter Berechtigung auf

Vor kurzem lerne ich, wie man Skriptcode schreibt.

Ich habe ein Skript geschrieben:

#!/bin/sh
# while3b.sh
while f=`line`
do
        .. process f ..
done < ./myfile

und hier istmyfile

hello
howdy
gday
bonjour
guten tag 
您好!
*

Im Terminal habe ich Folgendes eingegeben: sh while3b.shund dann wurden einige Berechtigungsinformationen wie diese abgefragt.

while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied

Ich habe versucht, ls -alzu überprüfen rwx,myfile

-rwxrwxrwx 1 shanechiu shanechiu    48 Jan 31 11:38 myfile
-rwxr-xr-x 1 shanechiu shanechiu    61 Jan 31 11:45 while3b.sh

und ich su - rootwechselte zum Superuser und führte dann das while3b.sh-Skript erneut aus. Es wurden dieselben Informationen angezeigt. Warum?

Kann mir jemand einen Gefallen tun? Vielen Dank im Voraus.

Antwort1

Ich vermute, dass es sich um die Zeile handelt, die das Sternchen (" *") in Ihrem enthält myfile. Sie werten es firgendwie aus und stoßen wahrscheinlich auf Probleme, wenn das Sternchen als Mustervergleichszeichen erweitert wird.

Beispiel:

#!/bin/sh
# while3b.sh
while f=`line`
do
        echo $f
done < ./myfile

führt zu

$ ./while3b.sh
hello
howdy
gday
bonjour
guten tag
您好!
myfile myfile~ while3b.sh

Denn mein Verzeichnis enthält die drei Dateien myfile, myfile~und while3b.sh. Sie sollten Ihren Code, den Sie mit „Prozess“ abgekürzt haben, untersuchen, was er tut, wenn er $fmit den Dateien gefüttert wird *.

verwandte Informationen