Shell
是否可以在轉義引號內轉義引號內的轉義引號內轉義引號?
我想做的是在一個…中執行一個命令
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 的東西。
做三個引號沒有幫助,你只是取消引用,引用,然後再次取消引用。您也不需要子shell。
你真正想要的是:
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
該解決方案需要一點 fd 雜耍,因為您需要通過從 讀取的初始密碼
su
,並且su
不會傳遞任何高於 2 的文件描述符。但是一旦您通過了身份驗證su
,ssh
就不會搞砸 i/o 和因此您可以立即進行重新分配,並讓您在另一端呼叫的 shell 讀取標準輸入。