![](/img/trans.png)
[英]How to handle special characters in command line arguments for a shell script
[英]How to handle quotes, backtick special characters for running linux bash shell command in remote server
有人,請幫助我糾正下面浪費了一天多時間但又失敗了的命令,但失敗了,請幫助,我將在下面的ansible shell模塊中使用它。
ssh -o ConnectTimeout=5 splunk@10.145.32.172 '
sdline="`
grep -n TA-aws-hf-{{client_code}}-{{env_name}} /opt/splunk/etc/system/local/serverclass.conf
| awk -F \":\" \'{print $1}\'
`
&& sed -ie \"$sdline,`
echo $sdline + 3
| bc
`d\" /opt/splunk/etc/system/local/serverclass.conf
"
> ^C
甚至嘗試以下方式:
ssh -o ConnectTimeout=5 splunk@10.145.32.172 exec sdline=`grep -n TA-aws-hf-{{client_code}}-{{env_name}} /opt/splunk/etc/system/local/serverclass.conf|awk -F ":" '{print $1}'` && sed -ie "$sdline,`echo $sdline + 3|bc` d" /opt/splunk/etc/system/local/serverclass.conf
grep: /opt/splunk/etc/system/local/serverclass.conf: No such file or directory
bash: line 0: exec: sdline=: not found
反引號已棄用; 必要時使用$(modern $(command) substitution)
。 在這種情況下沒有必要。
如果您的遠程服務器具有GNU sed:
ssh splunk@10.145.32.172 'sed -i "/TA-aws-hf-{{client_code}}-{{env_name}}/,+2d" /opt/splunk/etc/system/local/serverclass.conf'
如果這樣可以使您使用sed: -e expression #1, char 19: unexpected ','
:
ssh splunk@10.145.32.172 '
cd /opt/splunk/etc/system/local
awk "/TA-aws-hf-{{client_code}}-{{/ {i=-3} i++>0" \
serverclass.conf > temp && mv $_ serverclass.conf
'
您的遠程命令非常復雜。
我建議以下內容:
ssh
在10.145.32.172
獲得交互式shell 在10.145.32.172
上創建一個完成所有工作的腳本, 10.145.32.172
所有內容進行硬編碼。
將命令行參數重構為腳本。
從本地計算機遠程調用腳本。
此策略簡化了腳本及其維護。 僅允許您發送重要參數。
如果必須在許多遠程計算機上部署腳本。 使用共享存儲資源,例如NFS。 (可選)在運行腳本之前使用scp
復制腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.