ここに私のbash(?シェル)スクリプトがあります。
command="ssh [email protected]$ip";
command2="\"ls /;bash\"";
xfce4-terminal -x sh -c "$command $command2; bash"
は、サーバーに接続し、正常に動作します
ls/
のコマンドを実行します。
しかし、その代わりにls /
..
の私は、このコマンドを実行します:
echo $SSH_CONNECTION | awk '{print $1}'
私は上記のコードで "ls /
" を置き換え、それが接続されているとすぐに、 それは単にプリント空白行。
私の理解に基づいて、コードはものがエスケープされていないので、それがサーバーに到達する前にローカルで実行されています。
私は手動で私のリモートサーバー上でこのコードを貼り付ける場合は...
echo $SSH_CONNECTION | awk '{print $1}'
それだけで正常に動作します。印刷する内容を正確に印刷します。
そこで質問です:バックスラッシュは私のコードで行くどこ?
私はそれは単にバックスラッシュの束をしようとしてように聞こえる知っている... 何かが動作するまで。
多くの方法を試しました。私は3倍と6倍のバックスラッシュで物事を逃れようとしました。
更新
これは十分ではありません。
それでも、空白行が接続されるとただちに印刷されます。
command="ssh [email protected]$ip";
command2="\"echo \$SSH_CONNECTION | awk '{print \$1}';bash\"";
xfce4-terminal -x sh -c "$command $command2; bash"
更新の答えの1から2
..
コードは以下のいい作品が、私はないですので、それは私の目には「非光」または多分ちょうど私の心に見えますエグゼクティブと右から左への配管に使用されましたか?
command="ssh -t [email protected]$ip";
command2="\"awk '{ print \\\$1 }' <<< \\\$SSH_CONNECTION; exec \\\$SHELL\""
xfce4-terminal -x sh -c "$command $command2; bash"
アップデートの回答から3
..
command2='"echo \"\$SSH_CONNECTION\" | awk '"'"'{ print \$1 }'"'"'; exec \$SHELL"'
も大丈夫動作しているようです。
"exec"コマンドは "light"ではないことを私に思い出させるので、私はまだ "exec"コマンドを使わないで解決策を探しています。ので、多分それだけで認知
更新4です:
は「幹部\ $ SHELLを」判明したコードの一部ではありませんでした。それは単に "bash"コマンドの代わりにsshにログインしていただけです。
情報はbash コマンドよりもリソース消費が少ないと言われていますが、将来検討される予定です。
今のところこれが最終結果であるようです。
command2='"echo \"\$SSH_CONNECTION\" | awk '"'"'{ print \$1 }'"'"';bash"'
それは単純に左から右への配管は非常に合理的に見える...
更新5
最終的なコードは次のとおりです。
command="ssh -p 2201 -t [email protected]$ip";
command2='"echo \"\$SSH_CONNECTION\" | awk '"'"'{ print \$1 }'"'"';bash"'
xfce4-terminal -x sh -c "$command $command2; bash"
代わりに一重引用符を使用してみるとよいでしょう。 varはローカルで評価されません(awk argを変更して二重引用符を使用する必要があります):command = 'echo $ SSH_CONNECTION' –
進捗状況: 'command2 =" \ "{echo 'aaaa'; } | tail -c 2; bash \ ""; ' –
あなたは' exec'なしで同じことをすることができますが、「好きではないから」というのは、それを使わないのが良い理由ではありません。 –