Shell-Script

簡單貓和重定向到變數之間的區別

  • March 22, 2017

我寫了以下腳本

#!/bin/bash
echo "Power Details"
fall='/sys/class/power_supply/BAT1'
full=cat $fall/energy_full
echo 'printing here'
echo $full

它顯示以下錯誤:

./power.sh: line 4: /sys/class/power_supply/BAT1/energy_full: Permission denied

我正在訪問的文件對所有人都有讀取權限。此外,雖然我只是列印文件的輸出,例如(編輯程式碼的第 4 行):

cat $path/energy_full

它顯示沒有錯誤。為什麼會這樣?cat filenamev/s有var1 = cat filename什麼不同?在不更改我要訪問的文件的讀寫執行權限的情況下,我應該怎麼做才能解決這個問題?

注意:我以 root 使用者身份執行 Kali Linux

問題是您使用錯誤的語法將命令的輸出分配給變數。

要按要求回答您的問題, 和 之間的區別在於cat filenamevar=cat filename在第一種情況下,您正在執行命令caton filename。在第二種情況下,您正在執行命令filename,同時將 的值設置varcat。但是,filename它不是可執行命令,因此您會收到權限錯誤。

由於您實際上想將cat命令的輸出分配給變數,因此您需要這樣做:

var=$(cat filename)

引用自:https://unix.stackexchange.com/questions/352955