问题出在标题中。我在谷歌上找不到任何东西,所以我希望有人可以向我解释这个。
我使用的是debian 6.0.5,并且在/ etc / passwd文件中分配给执行用户的shell是/ bin / bash
因此,只需编写cd ~
即可,并将我带到用户主目录。
test -d "~/some_dir"
在if语句中返回false(some_dir exsits)
编辑:
抱歉,我应该更加清楚我写/bin/bash cd ~
而不是cd ~
的原因:我正在编写一个带有#!/bin/bash
的bash脚本,上面提到的if语句最终会出现在false中子句。
答案 0 :(得分:3)
在运行命令之前,将扩展任何命令行的选项,即使对于内部命令也是如此。无论你使用什么shell来运行/bin/bash cd ~
,都可能是字面上解释代字号,而不是扩展到主目录的特殊字符。
作为测试,尝试按该名称创建目录,并查看错误是否消失。
> mkdir ./~
> /bin/bash cd ~
请注意,cd
命令需要在正在运行的shell 中完成才有用。当您更改子shell的工作目录,然后退出子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
详细的错误报告非常方便,但如果您不需要它们,那么保持代码较小也具有优势。
答案 1 :(得分:2)
假设你做了
$ /bin/bash cd ~
你的shell将cd
解释为/bin/bash
的参数。该语法可以是例如用于调用shell脚本。
您最想要的是更改当前的工作目录。在这种情况下,你只需要
$ cd ~
答案 2 :(得分:2)
尝试以下方法:
/bin/bash -c "cd ~"
答案 3 :(得分:2)
不要使用引号""
例如:
$ test -d ~/.aptitude
$ echo $?
0
$ test -d "~/.aptitude"
$ echo $?
1
~
未在引号""
内展开。使用$HOME