在bash脚本

时间:2016-02-11 19:10:04

标签: linux bash

我是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 命令扩展了它,但看起来它应该是最后的手段。

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

使用gnu提供的envsubst替换shell格式字符串中的环境变量:

dir=$(awk -F '["=]+' '/DOWNLOAD/{print $2}' file | envsubst)
echo "$dir"
# will output /home/user/Downloads
cd "$dir"

答案 1 :(得分:1)

从评论中的讨论中有两个问题:

  1. $DIR中有换行符。我相信这是你原来错误的原因。我建议使用不同的方法来确定$DIR

    DIR=$(echo $OUTPUT | sed -r 's/.*="(.*)"/\1/g')
    
  2. 变量$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")"