![unix/linux bash 上的 `line` 命令提示权限被拒绝信息](https://linux22.com/image/1552446/unix%2Flinux%20bash%20%E4%B8%8A%E7%9A%84%20%60line%60%20%E5%91%BD%E4%BB%A4%E6%8F%90%E7%A4%BA%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%E4%BF%A1%E6%81%AF.png)
最近在学习如何编写脚本代码。
我写了一个脚本:
#!/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
因为我的目录包含三个文件myfile
、myfile~
和while3b.sh
。您应该检查您用“进程”缩写的代码,看看它在$f
输入时会做什么*
。