Shell

是否可以在轉義引號內轉義引號內的轉義引號內轉義引號?

  • January 27, 2019

我想做的是在一個…中執行一個命令

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 的文件描述符。但是一旦您通過了身份驗證sussh就不會搞砸 i/o 和因此您可以立即進行重新分配,並讓您在另一端呼叫的 shell 讀取標準輸入。

引用自:https://unix.stackexchange.com/questions/216733