簡體   English   中英

如何處理引號,反引號特殊字符以在遠程服務器中運行linux bash shell命令

[英]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

上下文:該問題似乎起源於XY問題 OP似乎要刪除3行,包括字符串“ TA-aws-hf-{{client_code}}-{{env_name}}”之后。


反引號已棄用; 必要時使用$(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
'

您的遠程命令非常復雜。

我建議以下內容:

  1. 使用ssh10.145.32.172獲得交互式shell
  2. 10.145.32.172上創建一個完成所有工作的腳本, 10.145.32.172所有內容進行硬編碼。

  3. 將命令行參數重構為腳本。

  4. 從本地計算機遠程調用腳本。

此策略簡化了腳本及其維護。 僅允許您發送重要參數。

如果必須在許多遠程計算機上部署腳本。 使用共享存儲資源,例如NFS。 (可選)在運行腳本之前使用scp復制腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM