Shell-Script
shell腳本中ssh塊上的環境變數
我有以下功能:
GetHostName () { NODE01_CHECK=`cat /etc/hosts | grep -w "node01" | awk '{print $1}'` NODE02_CHECK=`cat /etc/hosts | grep -w "node02" | awk '{print $1}'` IS_NODE1=`ifconfig -a | grep -w $NODE01_CHECK` IS_NODE2=`ifconfig -a | grep -w $NODE02_CHECK` if [[ ! -z $IS_NODE1 ]]; then echo "This is NODE 1" fi if [[ ! -z $IS_NODE2 ]]; then echo "This is Node 2" fi }
此腳本將辨識是否在屬於集群的兩個節點之一上配置了某個 ip。這在本地執行良好,但我需要從只知道集群 VIP 的伺服器遠端執行它。目標是將一些文件傳輸到兩個節點。
所以當我執行時:
scp -r /tmp/files CLUST_VIP ssh CLUST_VIP <<EOF NODE01_CHECK=`cat /etc/hosts | grep -w "node01" | awk '{print $1}'` NODE02_CHECK=`cat /etc/hosts | grep -w "node02" | awk '{print $1}'` IS_NODE1=`ifconfig -a | grep -w $NODE01_CHECK` IS_NODE2=`ifconfig -a | grep -w $NODE02_CHECK` if [[ ! -z $IS_NODE1 ]]; then scp -r /tmp/files node02 fi if [[ ! -z $IS_NODE2 ]]; then scp -r /tmp/files node01 fi EOF
但是,現在在 ssh 塊中執行相同的命令時,我收到以下消息:
Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information. Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information. Pseudo-terminal will not be allocated because stdin is not a terminal.
我也嘗試過使用
ssh -t
並刪除了上述有關 的錯誤grep
,但環境變數似乎不起作用。有沒有辦法在 ssh 塊上使用環境變數?
man bash
:這里文件的格式是:
<<[-]word here-document delimiter
不會對word執行參數和變數擴展、命令替換、算術擴展或路徑名擴展。如果word中的任何字元被引用,則分隔符是 word 上去除引號的結果,並且 here-document 中的行不展開。 如果word 不帶引號,則 here-document 的所有行都經過參數擴展、命令替換和算術擴展,字元序列 <newline> 被忽略,並且必須使用 \ 來引用字元 \、$ 和 ` .