私がやろうとしているのは、内部でコマンドを実行することです...
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したいと思います。
3つの引用符を実行しても効果はありません。引用符を外し、引用符を付けて、もう一度引用符を外します。サブシェルも必要ありません。
あなたが本当に欲しいのは:
su - someuser -c 'ssh someplace "if ! grep \"some thing\" /etc/somefile; then doSomething; fi"'
この種のアプローチはすぐに扱いにくくなる可能性があります。サーバーにスクリプトを配置して実行することを検討してください。それはあなたをネストされた引用地獄から遠くに遠ざけるでしょう。
ヒアドキュメントを使用できます。
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
、ssh
はI/Oに失敗しないため、すぐに再割り当てを実行して、もう一方の端で呼び出されたシェルにstdinを読み取らせることができます。