私がしたいのは、私からコマンドを実行することです。
su - someuser -c "ssh someplace \"if ( ! grep <b>[WHAT DO I PUT HERE?]</b>some thing<b>[WHAT DO I PUT HERE]</b> /etc/somefile ); then doSomething; fi\""
私を混乱させる文字列をgrepするのはその引用符です。それでは、空白なしでコンテンツをgrepして問題を解決しましょう。ただし、grepしたい項目をgrepすることをお勧めします。
答え1
3つの引用符を追加することは機能しません。引用解除、引用、および再引用解除のみ可能です。サブシェルも必要ありません。
あなたが本当に欲しいものは:
su - someuser -c 'ssh someplace "if ! grep \"some thing\" /etc/somefile; then doSomething; fi"'
このアプローチは迅速に扱いにくくなる可能性があります。サーバーにスクリプトを配置して実行することを検討してください。これにより、ネストされた参照地獄から抜け出すことができます。
答え2
ここにある文書を使用してください。
su -someuser -c '<&1 >&2 ssh you@machine sh' 1<<\SCRIPT
if ! grep 'some spaces or whatever' /etc/somefile
then : do something
fi
#END
SCRIPT
su
で読み取った初期パスワードを渡す必要があり、su
2より大きいファイル記述子を渡さないため、このソリューションには少しfdジャグリングが必要です。ただし、一度認証するとsu
i ssh
/ oを台無しにしないため、すぐに再割り当てされ、もう一方の端で呼び出されたシェルがstdinを読み取ることができます。