[英]Running linux commands inside bash script throws permission denied error
[英]“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="$1"
[[ $# -eq 2 ]] && mode=2; arg1="$1"; arg2="$2"
if [[ mode -eq 1 ]]
then
while :
do
"$(ls "$1")"
[[ $? -eq 0 ]] && echo "$1 has been downloaded! I'm going to poweroff now.."
sleep 20m;
done
elif [[ mode -eq 2 ]]
then
while :
do
"$(ls "$1")" 3> /dev/null
if [[ $? -eq 0 ]]
then
"$(ls "$2")" 3> /dev/null
if [[ $? -eq 0 ]]
then
echo "$1 \n and \n $2 \have been downloaded! I'm going to poweroff now.."
fi
sleep 20m;
fi
done
else
echo "Not more than two arguments! Exiting.."; exit 1;
這是我的代碼。(它不是最終版本,只是測試)給定一個現有的文件路徑,它返回一個 ls 權限錯誤。 我檢查了權限並嘗試了不同的情況,如最初的評論所示,我還檢查了誰在運行腳本(也許這是一個荒謬的錯誤(?))。 我在 bash 提示符中嘗試了相同的命令和文件路徑,並且效果很好。 有人知道可能是什么問題嗎? 錯誤示例:
Documents/CheckFilesThenDo.sh: line 12: /home/user/Downloads/file: Permission denied
編輯:如前所述,並不是用戶不能 ls 文件(真正的權限錯誤)。 現在看來,它導致了這種行為的“$(ls)”(ls 有效)。 我還是不明白為什么。
每個 Linux 文件都設置了權限。 您可以在此處閱讀有關權限類型和...的信息!
循環中的第一個命令,
"$(ls "$1")"
沒有多大意義。 您正在執行ls
,收集其標准輸出,並將此信息解釋為要執行的命令。
這留下了兩種可能性:
如果此時$1
包含一個文件名,並且ls
有權訪問其目錄,則該命令將簡單地 output 這個文件名,然后您將執行它。 這僅在文件具有執行權限時才有效,在這種情況下,您可以更簡單地編寫
"$1"
如果 $1 沒有設置 x 位,您會得到“權限被拒絕”。
但是,如果該文件不存在,則ls
不會向 stdout 寫入任何內容。 您只會看到有關丟失文件的錯誤消息,但沒有執行任何操作。
除此之外:如果您真的在問題中引用了完整的錯誤消息,這意味着該腳本不是由 bash 執行的,因為 bash 會這樣說:
bash :文檔/CheckFilesThenDo.sh::第 12 行:....權限被拒絕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.