最近、スクリプトコードの書き方を学んでいます。
私はスクリプトを書きました:
#!/bin/sh
# while3b.sh
while f=`line`
do
.. process f ..
done < ./myfile
そしてここにmyfile
hello
howdy
gday
bonjour
guten tag
您好!
*
ターミナルで次のように入力するsh while3b.sh
と、次のような権限情報の入力を求められました。
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
確認ls -al
するために使ってみました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
スーパーユーザーに変更しsu - root
、while3b.sh スクリプトを再度実行すると、同じ情報が表示されました。なぜでしょうか?
誰か私に頼み事をしてくれませんか?よろしくお願いします。
答え1
私の推測では、それはあなたの 内のアスタリスク (" *
")を含む行ですmyfile
。何らかの方法で評価しf
、アスタリスクがパターン マッチング文字として展開されると、おそらく問題が発生します。
例:
#!/bin/sh
# while3b.sh
while f=`line`
do
echo $f
done < ./myfile
つながる
$ ./while3b.sh
hello
howdy
gday
bonjour
guten tag
您好!
myfile myfile~ while3b.sh
私のディレクトリには、、およびの3 つのファイルが含まれているためmyfile
、が入力されたときに「process」で省略したコードが何を行うかを調べる必要があります。myfile~
while3b.sh
$f
*