簡體   English   中英

“ / bin / bash cd〜”顯示為“ / bin / bash:cd:沒有這樣的文件或目錄”,為什么?

[英]“/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM