unix/linux bash 上的 `line` 命令提示权限被拒绝信息

unix/linux bash 上的 `line` 命令提示权限被拒绝信息

最近在学习如何编写脚本代码。

我写了一个脚本:

#!/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检查rwxmyfile

-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

因为我的目录包含三个文件myfilemyfile~while3b.sh。您应该检查您用“进程”缩写的代码,看看它在$f输入时会做什么*

相关内容