在字串中包含雙引號

在字串中包含雙引號

我的命令是

X=`ssh ${OS_USER}@${OS_HOST} ". ~/.kshrc ;
   ulimit -c unlimited ;
   cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf;
   echo "export RC_DB_INSTANCE=$7" >> RC_CONV_SET_VARS"`

$7應該用雙引號引起來。怎樣才能做到呢?

答案1

您有多層嵌套雙引號。這變得非常棘手,非常醜陋,並且非常難以閱讀和修改。例如`

ssh ${OS_USER}@${OS_HOST} \
    ". ~/.kshrc; ... ;
     echo \"export RC_DB_INSTANCE=\\\"\\\$7\\\"\" >> RC_CONV_SET_VARS".

echo(注意:我在我的系統上測試了多引號bash -c,它可以工作,但我什至不能 100% 確定它能在 中工作ssh。多級引號和反斜杠是 PITA,應該避免)

然後,如果 RC_CONV_SET_VARS 不是文字檔案名稱而是變數名,情況會變得更加複雜...進一步複雜取決於 RC_CONV_SET_VARS 是本地系統還是遠端系統。

編寫一個簡單的一次性腳本,scp將其發送到遠端主機,然後使用ssh.

例如:

將以下內容另存為myscript.ksh

#! /usr/bin/ksh
. ~/.kshrc
ulimit -c unlimited
cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf
echo 'export RC_DB_INSTANCE="$7"' >> "$RC_CONV_SET_VARS"

然後scp它到遠端主機並運行它:

scp myscript.ksh "${OS_USER}@${OS_HOST}:/tmp/"
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh'

仍有一些引用問題需要解決,但它們與編寫打算在本機系統上運行的腳本時的引用幾乎相同。反斜線轉義和引號的多個關卡並不醜陋、複雜和令人困惑。

如果這看起來不切實際,因為您必須多次輸入密碼,那麼就不要這樣做 - 設定基於金鑰的身份驗證並不要在 ssh 中使用基於密碼的身份驗證

順便說一句,您可以在命令列上傳遞您需要的任何參數ksh myscript.sh

ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh arg1 arg2 arg3'

或者,如果您需要傳遞第 7 個參數當地的腳本到遠端腳本:

ssh "${OS_USER}@${OS_HOST}" "ksh /tmp/myscript.ksh \"$7\""

並將上面的最後一行改為myscript.ksh

echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"

答案2

您必須「轉義」引號:

echo "export RC_DB_INSTANCE=\"$7\""

會成功的...

相關內容