簡體   English   中英

從bash腳本中的grep輸出擴展環境變量

[英]Expand environmental variable from grep output in bash script

我是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命令擴展了它,但看起來它應該是最后的手段。

謝謝您的幫助!

使用gnu提供的envsubst用shell格式字符串替換環境變量:

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

從評論中的討論中有兩個問題:

  1. $DIR有換行符。 我相信這是你原來錯誤的原因。 我建議使用不同的方法來確定$DIR

     DIR=$(echo $OUTPUT | sed -r 's/.*="(.*)"/\\1/g') 
  2. 變量$DIR的文字$HOME可以用envsubst代替

     DIR=$(echo $DIR | envsubst ) 

試試這個:

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")"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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