Shell
當我使用 ssh usr@ip ‘pscp ……’ 時,’..’ 和 ‘..’ 之間的區別
我的伺服器機器執行 Window,它安裝了 Cygwin。
我的客戶端機器執行linux。
在 Clinent 機器中。我這樣做:
[sikaiwei@login-1-2 v1.4]$ bash test.sh CHUN~19900405 sikaiwei@192.168.9.102:/ifs2/BC_MG/GROUP/sikaiwei/ssh/v1.4 start PuTTY Secure Copy client Release 0.63 Usage: pscp [options] [user@]host:source target pscp [options] source [source...] [user@]host:target pscp [options] -ls [user@]host:filespec Options: -V print version information and exit -pgpfp print PGP key fingerprints and exit -p preserve file attributes -q quiet, don't show statistics -r copy directories recursively -v show verbose messages -load sessname Load settings from saved session -P port connect to specified port -l user connect with specified username -pw passw login with specified password -1 -2 force use of particular SSH protocol version -4 -6 force use of IPv4 or IPv6 -C enable compression -i key private key file for authentication -noagent disable use of Pageant -agent enable use of Pageant -batch disable all interactive prompts -unsafe allow server-side wildcards (DANGEROUS) -sftp force use of SFTP protocol -scp force use of SCP protocol end
似乎警告我
pscp
在我的 test.sh 文件中使用了 ’ ’ !但我沒有。我的 test.sh 是:#!/bin/bash sshpass -p 'CHUN~19900405' ssh sikaiwei@172.16.22.53 ' echo start; touch final_result.txt; pscp -pw $1 final_result.txt $2; echo end; ';
但是當我使用“..”而不是“..”時,就像
#!/bin/bash sshpass -p 'CHUN~19900405' ssh sikaiwei@172.16.22.53 " echo start; touch final_result.txt; pscp -pw $1 final_result.txt $2; echo end; ";
它不會重新發布錯誤:
[sikaiwei@login-1-2 v1.4]$ bash test.sh CHUN~19900405 sikaiwei@192.168.9.102:/ifs2/BC_MG/GROUP/sikaiwei/ssh/v1.4 start end
我必須使用“..”而不是“..”來使用 Server machine.like 的環境變數
[sikaiwei@login-1-2 v1.4]$ sshpass -p 'CHUN~19900405' ssh 172.16.22.53 -l sikaiwei "getId=$ORANGE;echo $ORANGE;ORANGE=$((ORANGE+1));echo $ORANGE;echo 'getId is '+$getId;"
$ORANGE 是伺服器機器的變數。
所以我必須使用’..’,以及如何仍然使用 $ 1, $ 2 得到爭論?
變數不以單引號展開,這是您在第一個實例中傳遞命令的方式。因此,在第一種情況下,遠端端的 shell 從不接收您的值,它只接收文字
$1
and$2
,並且它們不存在,因此它們擴展為空。$ var=foo $ echo '$var' $var $ echo "$var" foo
pscp``$1
因此,當您通過and時不會獲得任何值$2
(因為它們在遠端 shell 上不存在),因此它在啟動時會出錯。這就是pscp
最終被呼叫的方式:pscp -pw final_result.txt
當您希望由目前 shell 擴展變數時使用雙引號,而不是單引號。在這種情況下使用單引號僅在您希望通過遠端shell擴展變數時才合適。