Linux bash:用户给出的目标目录,存储在变量中

时间:2015-12-18 12:42:15

标签: linux bash shell sh

我需要在linux bash中创建一个脚本,在某些时候用户可以输入目录的路径。为此,我应该使用read -p命令。然后我应该检查目录是否存在。我的代码可以正常工作,直到用户尝试输入~/path。代码无法将符号〜识别为主目录。有什么建议吗?

read -p "Please, enter the destination: "
    if [ -d "$REPLY" ]; then
        echo "Directory exists!"
    fi

2 个答案:

答案 0 :(得分:4)

您必须自己将~替换为"$HOME"。还有其他类型的波浪扩展,您通常使用较少,例如~user来获取用户的homedir而不是您自己的。假设你只关心第一种情况,那么参数扩展就可以了

read -ep 'Please, enter the destination: ' dir
dir=${dir/#~/$HOME}
if [[ -d $dir ]]; then
    printf 'Good job, the directory exists!\n'
fi

您可能会注意到我在读取命令中添加了-e。这使得read使用readline库来读取目录。这意味着用户可以使用制表符完成。

有关bash中字符串操作的更多信息,请参阅BashFAQ 100

答案 1 :(得分:1)

一般情况下,除了直接在shell提示符下,你应该避免(并鼓励人们避免)使用~扩展。

如果你必须处理它并希望支持所有各种扩展bash代码扩展,那么你可以使用类似我的tildeExpand.sh脚本。