2017-06-29 120 views
0

現在我到目前爲止這個文件......傳遞變量在shell腳本

#!/usr/bin/env bash 

DIRECTORY=$1 

ssh [email protected] "$(cat <<'EOT' 
cd /web/$DIRECTORY || exit 
pwd 
unset GIT_DIR 
git log --oneline -n 10 --decorate 
git branch 
EOT 
)"; 

爲什麼PWD剛剛打印出「/網絡/」?它實際上並沒有使用我的變量。然後,所有的git命令都會拋出關於在web目錄中的錯誤。

如果我在ssh-ing之前echo $ DIRECTORY,它會迴應我的變量,但拒絕將它傳遞給ssh命令?

回答

1

發生這種情況是因爲您引用了這裏的doc分隔符。這裏的POSIX

如果任何字符被引用,分隔符是通過對單詞進行引用刪除形成,這裏的文檔線不會擴大。否則,分隔符就是這個詞本身。

而且這裏有一個例子:

#!/bin/bash 
var=42 

cat << 'end' 
With quotes: $var and \$var 
end 

cat << end 
Without quotes: $var and \$var 
end 

執行時:

With quotes: $var and \$var 
Without quotes: 42 and $var