[英]Running a Bash script over ssh
我正在嘗試編寫一個 Bash 腳本,它將通過 SSH 連接到一台機器並創建一個目錄。 長期目標有點復雜,但現在我從簡單開始。 然而,雖然很簡單,但我似乎不太明白。 這是我的代碼:
#!/bin/bash
ssh -T tunneluser@111.222.333.444 <<EOI
# Fix "TERM environment variable undefined" error.
TERM=dumb
export TERM
# Store todays date.
NOW=$(date +"%F")
echo $NOW
# Store backup path.
BACKUP="/backup/$NOW"
[ ! -d $BACKUP ] && mkdir -p ${BACKUP}
echo $BACKUP
exit
EOI
它運行時沒有任何顯式錯誤。 但是,回顯的 $NOW 和 $BACKUP 變量顯示為空,並且未創建 /backup 目錄。 我該如何解決?
本地主機上的 shell 正在對 $NOW 和 $BACKUP 進行變量替換,因為“EOI”沒有被轉義。 代替
ssh tunneluser@111.222.333.444 <<EOI
和
ssh tunneluser@111.222.333.444 <<\EOI
正在本地計算機上的腳本中評估變量。 您需要用轉義的美元符號代替美元符號。
#!/bin/bash
ssh -T tunneluser@111.222.333.444 <<EOI
# Fix "TERM environment variable undefined" error.
TERM=dumb
export TERM
# Store todays date.
NOW=\$(date +"%F")
echo \$NOW
# Store backup path.
BACKUP="/backup/\$NOW"
[ ! -d \$BACKUP ] && mkdir -p \${BACKUP}
echo \$BACKUP
exit
EOI
您的腳本在發送之前正在本地主機上進行替換。
將第一行更改為:
ssh -T tunneluser@111.222.333.444 <<'EOI'
這將導致原始腳本在您的遠程主機上被發送和解釋。
如果您想要混合(例如,如果您想要在本地主機上執行date
命令,您應該保持 ssh 行不變並引用單個命令):
ssh -T tunneluser@111.222.333.444 <<EOI
# Execute the date command on the local machine. The assignment still
# happens on the remote machine
NOW=$(date +"%F")
# Quote your $ so that the replacement happens on the remote machine
echo \$NOW
通過 SSH 執行腳本,無需復制腳本文件。 您需要一個簡單的 SSH 連接和一個本地腳本。
#!/bin/sh
print_usage() {
echo -e "`basename $0` ssh_connexion local_script"
echo -e "Remote executes local_script on ssh server"
echo -e "For convinient use, use ssh public key for remote connexion"
exit 0
}
[ $# -eq "2" ] && [ $1 != "-h" ] && [ $1 != "--help" ] || print_usage
INTERPRETER=$(head -n 1 $2 | sed -e 's/#!//')
cat $2 | grep -v "#" | ssh -t $1 $INTERPRETER
此腳本執行以下操作: 1° 捕獲第一行 #! 要獲得解釋器(即:Perl、Python、Ruby、Bash 解釋器),2° 通過 SSH 啟動遠程交互器,3° 通過 SSH 發送所有腳本主體。
本地腳本必須以 #!/path/to/interpreter 開頭 - Bash 腳本的 #!/bin/sh - Perl 腳本的 #!/usr/bin/perl - Python 腳本的 #!/usr/bin/python - #! /usr/bin/ruby 用於 Ruby 腳本
此腳本不是基於本地腳本擴展名,而是基於 #! 信息。
嘗試:
NOW=`date +"%F"`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.