[英]“/bin/bash cd ~” results in “/bin/bash: cd: No such file or directory”, why?
問題在標題中。 我在Google上找不到任何內容,因此希望這里有人可以向我解釋。
我正在使用debian 6.0.5,在/ etc / passwd文件中分配給執行用戶的shell是/ bin / bash
因此,只需編寫cd ~
就能使我進入用戶的主目錄。
test -d "~/some_dir"
在if語句中返回false(some_dir存在)
編輯:對不起,我應該更清楚地了解為什么我要編寫/bin/bash cd ~
而不是cd ~
:我正在使用#!/bin/bash
編寫bash腳本,上述if語句最終以錯誤條款。
在運行命令之前,即使對於內部命令,也將擴展任何命令行的選項。 無論您使用什么shell運行/bin/bash cd ~
大概都是在解釋波浪號,而不是擴展到主目錄的特殊字符。
作為測試,請嘗試使用該名稱創建目錄,然后查看錯誤是否消失。
> mkdir ./~
> /bin/bash cd ~
請注意, cd
命令需要在正在運行的shell中完成才能使用。 當您更改子外殼的工作目錄,然后退出子外殼時,您會發現自己回到了開始的位置。
更新 :
在bash腳本中,您應該能夠使用$HOME
環境變量,該變量應始終包含您的主目錄。 我不知道什么情況會導致波浪符號擴展失敗,但是我一直使用$HOME
。
另外,在確定是否可以切換到特定目錄時,可以選擇是顯式的並返回有用的狀態:
unset err
if [[ ! -d "$somedir" ]]; then
err="Can't find $somedir"
elif [[ ! -r "$somedir" ]]; then
err="Can't read $somedir"
fi
if [[ -n "$err" ]]; then
echo "$ERROR: $err" >&2
exit 1
fi
cd "$somedir"
或者,您可以嘗試CD並查看其結果。
if ! cd "$somedir"; then
echo "ERROR: $somedir not availble"
exit 1
fi
詳細的錯誤報告很方便,但是如果不需要它們,則使代碼較小也有好處。
假設你做了
$ /bin/bash cd ~
您的外殼將cd
解釋為/bin/bash
的參數。 該語法可以例如用於調用Shell腳本。
您最可能想要的是更改當前工作目錄。 在這種情況下,您所需要做的就是
$ cd ~
請嘗試以下操作:
/bin/bash -c "cd ~"
請勿使用引號""
示例:
$ test -d ~/.aptitude
$ echo $?
0
$ test -d "~/.aptitude"
$ echo $?
1
~
不在引號""
內擴展。 使用$HOME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.