Bash
SSH bash 4.X 上的命令替換中的變數擴展
我想做這個
ssh ${w100user}@web100 'ls -l "$(grep "${1}" /etc/pure-ftpd/pureftpd.passwd|cut -d':' -f6)"'
顯然,它以 w100user 身份對伺服器 web100 執行 ssh 會話,然後 greps 腳本的第一個參數“ $ 1" in the file pureftp.passwd, grabbing the 6th field which should be that user’s home directory and will then list the contents with a long listing of that user’s home directory. I can’t seem to get $ 1 在通過 SSH 的命令替換之前正確擴展。我嘗試了多種引用方法,包括’ $ ( " $ 1" 命令…)’,此時它只是猜測。
將它傳遞給一個經常傳遞的
$LC_xxx
變數:ssh
LC_MY_USER=$1 ssh "${w100user}@web100" ' ls -l "$(grep -F "$LC_MY_USER" /etc/pure-ftpd/pureftpd.passwd|cut -d: -f6)"'
或者可能更強大:
LC_MY_USER=$1 ssh "${w100user}@web100" ' ls -l -- "$(awk -F: "/\$1 == ENVIRON[\"LC_MY_USER\"] {print \$6; exit} " /etc/pure-ftpd/pureftpd.passwd)"'
(假設您要檢查
$1
該密碼文件中的第一個欄位)。你可以這樣做:
ssh "${w100user}@web100" ' ls -l "$(grep -F "'"$1"'" /etc/pure-ftpd/pureftpd.passwd|cut -d: -f6)"'
讓本地 shell expand
$1
,但要注意它有潛在的危險,因為它被遠端 shell 解釋為 shell 程式碼(例如$1
be$(rm -rf /)
)。所以你得先消毒$1
。