我是bash脚本的新手,我只是想让它工作。我想要的是一个cd到默认下载目录的脚本,例如/ home / davide / Downloads,并从Ubuntu下载文件。我正在获取默认下载目录,如:
OUTPUT=$(grep DOWNLOAD $HOME/.config/user-dirs.dirs)
DIR=$(echo $OUTPUT | cut -f 2 -d "=" | tr "\"" "\n")
工作正常。 DIR是一个字符串,如:
$HOME/Downloads
当我尝试cd到它时出现问题。它的确如下:
cd $HOME/Downloads
会引发错误,而应该是:
cd /home/davide/Downloads
我搜索了很多,在我看来应该完成扩展。我已经通过使用 eval 命令扩展了它,但看起来它应该是最后的手段。
感谢您的帮助!
答案 0 :(得分:3)
使用gnu
提供的envsubst
替换shell格式字符串中的环境变量:
dir=$(awk -F '["=]+' '/DOWNLOAD/{print $2}' file | envsubst)
echo "$dir"
# will output /home/user/Downloads
cd "$dir"
答案 1 :(得分:1)
从评论中的讨论中有两个问题:
$DIR
中有换行符。我相信这是你原来错误的原因。我建议使用不同的方法来确定$DIR
:
DIR=$(echo $OUTPUT | sed -r 's/.*="(.*)"/\1/g')
变量$HOME
中的文字$DIR
可以替换为envsubst
DIR=$(echo $DIR | envsubst )
答案 2 :(得分:0)
试试这个:
cd "$(grep DOWNLOAD $HOME/.config/user-dirs.dirs | cut -f 2 -d "=" | tr "\"" "\n")"
或者,如果那不起作用:
cd "$(grep DOWNLOAD $HOME/.config/user-dirs.dirs | cut -f 2 -d "=" | tr "\"" "\n" | tr -d "\n")"