Mein Befehl ist
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
sollte in Anführungszeichen stehen. Wie kann das gemacht werden?
Antwort1
Sie haben mehrere Ebenen verschachtelter Anführungszeichen. Das wird sehr knifflig, sehr hässlich und sehr schwer zu lesen und zu ändern. zB `
ssh ${OS_USER}@${OS_HOST} \
". ~/.kshrc; ... ;
echo \"export RC_DB_INSTANCE=\\\"\\\$7\\\"\" >> RC_CONV_SET_VARS".
(HINWEIS: Ich habe die Mehrfachanführungszeichen echo
mit bash -c
auf meinem System getestet und es hat damit funktioniert, aber ich bin mir nicht einmal 100 % sicher, ob es auch mit funktioniert ssh
. Mehrere Ebenen von Anführungszeichen und Backslashs sind ein Ärgernis und sollten vermieden werden.)
und dann wird es noch komplizierter, wenn RC_CONV_SET_VARS kein wörtlicher Dateiname, sondern ein Variablenname ist … noch komplizierter, je nachdem, ob RC_CONV_SET_VARS lokal auf Ihrem System oder auf dem Remote-System ist.
Es ist viel einfacher, ein einfaches Wegwerfskript zu schreiben, scp
es auf den Remote-Host zu übertragen und es dann dort mit auszuführen ssh
.
Zum Beispiel:
Speichern Sie Folgendes unter 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
Führen Sie es dann zum Remote-Host aus:
scp myscript.ksh "${OS_USER}@${OS_HOST}:/tmp/"
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh'
Es müssen noch Anführungszeichenprobleme gelöst werden, aber sie sind so ziemlich dieselben, die Sie beim Schreiben eines Skripts haben würden, das Sie auf dem lokalen System ausführen möchten. Keine hässlichen, komplizierten und verwirrenden mehreren Ebenen von Backslash-Escapes und Anführungszeichen.
Wenn dies unpraktisch erscheint, weil Sie das Passwort mehrmals eingeben müssten, dann tun Sie das nicht - richten Sie eine schlüsselbasierte Authentifizierung ein undVerwenden Sie keine passwortbasierte Authentifizierung mit SSH.
Übrigens können Sie alle benötigten Argumente an die ksh myscript.sh
Befehlszeile übergeben.
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh arg1 arg2 arg3'
oder, wenn Sie das 7. Argument derlokalSkript zum Remote-Skript:
ssh "${OS_USER}@${OS_HOST}" "ksh /tmp/myscript.ksh \"$7\""
und ändern Sie die letzte Zeile myscript.ksh
oben etwa wie folgt:
echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"
Antwort2
Sie müssen die Anführungszeichen „escapen“:
echo "export RC_DB_INSTANCE=\"$7\""
wird reichen ...