"Permission Denied" bash 脚本中的 ls 错误
"Permission Denied" ls error in bash script
#!/bin/bash
#ls /home/"$(whoami)"
#ls /home/"$(whoami)/.bashrc"
[[ $# -eq 0 ]] && echo "Pass at least a valid filepath!" && exit 1;
[[ $# -eq 1 ]] && mode=1; arg1=""
[[ $# -eq 2 ]] && mode=2; arg1=""; arg2=""
if [[ mode -eq 1 ]]
then
while :
do
"$(ls "")"
[[ $? -eq 0 ]] && echo " has been downloaded! I'm going to poweroff now.."
sleep 20m;
done
elif [[ mode -eq 2 ]]
then
while :
do
"$(ls "")" 3> /dev/null
if [[ $? -eq 0 ]]
then
"$(ls "")" 3> /dev/null
if [[ $? -eq 0 ]]
then
echo " \n and \n \have been downloaded! I'm going to poweroff now.."
fi
sleep 20m;
fi
done
else
echo "Not more than two arguments! Exiting.."; exit 1;
这是我的代码。(这不是最终版本,只是测试)
给定一个存在的文件路径 returns 一个 ls 权限错误。我检查了权限并尝试了不同的情况,如最初的评论所示,我还检查了谁是 运行 脚本(也许这是一个荒谬的错误(?))。
我在 bash 提示符下尝试了相同的命令和文件路径,并且效果很好。有人知道可能是什么问题吗?
错误示例:
Documents/CheckFilesThenDo.sh: line 12: /home/user/Downloads/file: Permission denied
编辑:
前面已经说了,并不是说用户不能ls file(真实权限错误)。现在看来是“$(ls)”导致了这种行为(ls 有效)。我还是不明白为什么。
每个 Linux 文件都设置了权限!
您可以在 here!
阅读有关权限类型和...
循环中的第一个命令,
"$(ls "")"
没有多大意义。您正在执行 ls
,收集其标准输出,并将 此 信息解释为要执行的命令。
这留下了两种可能性:
如果此时</code>包含一个文件名,并且<code>ls
有访问其目录的权限,命令将简单地输出这个文件名,你将要执行它。这仅在文件具有执行权限时有效,在这种情况下,您可以更简单地编写
""
如果 $1 没有设置 x 位,您将收到“权限被拒绝”。
如果文件不存在,ls
不会向标准输出写入任何内容。您只是看到有关丢失文件的错误消息,但未执行任何操作。
除此之外:如果你真的在你的问题中引用了完整的错误消息,这意味着脚本不是由 bash 执行的,因为 bash 会说这样的话:
bash : Documents/CheckFilesThenDo.sh:: 第 12 行 : ....权限被拒绝。
#!/bin/bash
#ls /home/"$(whoami)"
#ls /home/"$(whoami)/.bashrc"
[[ $# -eq 0 ]] && echo "Pass at least a valid filepath!" && exit 1;
[[ $# -eq 1 ]] && mode=1; arg1=""
[[ $# -eq 2 ]] && mode=2; arg1=""; arg2=""
if [[ mode -eq 1 ]]
then
while :
do
"$(ls "")"
[[ $? -eq 0 ]] && echo " has been downloaded! I'm going to poweroff now.."
sleep 20m;
done
elif [[ mode -eq 2 ]]
then
while :
do
"$(ls "")" 3> /dev/null
if [[ $? -eq 0 ]]
then
"$(ls "")" 3> /dev/null
if [[ $? -eq 0 ]]
then
echo " \n and \n \have been downloaded! I'm going to poweroff now.."
fi
sleep 20m;
fi
done
else
echo "Not more than two arguments! Exiting.."; exit 1;
这是我的代码。(这不是最终版本,只是测试) 给定一个存在的文件路径 returns 一个 ls 权限错误。我检查了权限并尝试了不同的情况,如最初的评论所示,我还检查了谁是 运行 脚本(也许这是一个荒谬的错误(?))。 我在 bash 提示符下尝试了相同的命令和文件路径,并且效果很好。有人知道可能是什么问题吗? 错误示例:
Documents/CheckFilesThenDo.sh: line 12: /home/user/Downloads/file: Permission denied
编辑: 前面已经说了,并不是说用户不能ls file(真实权限错误)。现在看来是“$(ls)”导致了这种行为(ls 有效)。我还是不明白为什么。
每个 Linux 文件都设置了权限! 您可以在 here!
阅读有关权限类型和...循环中的第一个命令,
"$(ls "")"
没有多大意义。您正在执行 ls
,收集其标准输出,并将 此 信息解释为要执行的命令。
这留下了两种可能性:
如果此时</code>包含一个文件名,并且<code>ls
有访问其目录的权限,命令将简单地输出这个文件名,你将要执行它。这仅在文件具有执行权限时有效,在这种情况下,您可以更简单地编写
""
如果 $1 没有设置 x 位,您将收到“权限被拒绝”。
如果文件不存在,ls
不会向标准输出写入任何内容。您只是看到有关丢失文件的错误消息,但未执行任何操作。
除此之外:如果你真的在你的问题中引用了完整的错误消息,这意味着脚本不是由 bash 执行的,因为 bash 会说这样的话:
bash : Documents/CheckFilesThenDo.sh:: 第 12 行 : ....权限被拒绝。