2014-12-28 35 views
0

例如,如果我輸入〜或者〜/文檔作爲輸入我得到的消息/家庭/用戶名/文件工作正常。擊終端不能識別的路徑中的可變因「〜」

echo "Dose onoma katalogou" 

read Directory 

find $Directory -type f -perm 777 

爲什麼會發生這種情況以及如何修復它以便能夠鍵入路徑名,包括「〜」?

回答

1

bash展開變量$ Directory after它展開任何〜,因此一旦$ Directory被展開,展開的時間已經過去了。

eval find $Directory -type f -perm 777 

將工作,因爲eval將看到〜並再次運行shell擴展。

您可以通過簡單的命令測試效果:

tilde='~' 
echo $tilde   # prints a literal ~ 
eval echo $tilde  # prints your home directory 

順便說一句,包含空格的目錄名會引起問題。

+2

請注意:'eval'是一個非常強大的機制 - 如果用戶控制'$ Directory'的內容,則非常危險。例如,如果用戶將'Directory ='$(rm -f $ HOME&)''放入'eval'命令中,某人會非常不高興 - 尤其是如果腳本是由'root'運行的話。 –