文字列に二重引用符を含める

文字列に二重引用符を含める

私のコマンドは

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複数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"

おすすめ記事