エスケープされた二重引用符を使用して文字列にバインドする

エスケープされた二重引用符を使用して文字列にバインドする

Alt-s非常に複雑でネストされた二重引用符が必要なSSHコマンドにバインドしようとしています。

bind '"\es":"ssh -t me@myserver  \"echo \\"hi\\"; echo \\"bye\\"\""'

ただし、キーバインディングを実行すると、文字列の半分が切り捨てられます。

ssh -t me@myserver  "echo \"hi\";

文字列全体を挿入するには?これがセミコロンの後の空白の問題なのか、それとも二重引用符のすべての二重エスケープの問題なのかはわかりません。

ノートbind -x:a)実際のコマンドは印刷されず、b)実行時にEnterキーを押して実行する前に行を手動で変更する方法がないため、スタイルを使用したくありません。

答え1

エスケープシェル文字列は難しいかもしれません。努力する:

bind '"\es":"ssh -t localhost  \"echo \\\"hi\\\"; echo \\\"bye\\\"\""'

上記のコマンドを実行した後にEsc-sを押すと、コマンドラインに次のテキストが表示されます。

ssh -t localhost  "echo \"hi\"; echo \"bye\""

これはうまくいきます。実行すると、次の出力が生成されます。

hi
bye
Connection to localhost closed.

問題は、\\"単一のバックスラッシュの後にシェルアクティブ二重引用符が続くと解釈されることです。無効にするには、二重引用符をエスケープする必要があります。したがって\\\"、。

関連情報