引用和转义ssh命令行

这个问题在这里已经有了答案:

  • 如何在单引号字符串中转义单引号? 19个答案

  • 这里是通过玩报价的工作解决方案:

    ssh -q rmthost "bash -c 'ps -ef|grep ''''<'defunct'>''''|grep -v grep|awk "'"{print $2}"'" '"
    

    然而,我自己并不十分理解这个机制:-)。 并且如果您交换单引号和双引号,它也不起作用。


    老实说,我无法阅读你写的代码。 它太混乱了,我没有半个小时就搞清楚了。 为此,它很可能不是很好的代码。

    当您尝试了解多层解码时,像这样的引语会变得非常混乱。 所以不是试图纠正你的引号,我会尝试用相同的结果提供更干净的代码。

    ssh rmthost "bash -c "ps -ef | grep '<defunct>' | grep -v grep | awk '{print $2}'""
    
    # The remote system will execute this:
    bash -c "ps -ef | grep '<defunct>' | grep -v grep | awk '{print $2}'"
    
    # Which in tells bash to execute this:
    
    ps -ef | grep '<defunct>' | grep -v grep | awk '{print $2}'
    

    但是,为什么不尝试删除一些缓慢的grep管道。 awk可以为你做过滤。 我假设<defunct>出现在行末。 如果是这样,那么你可以使用:

    ssh rmthost "bash -c "ps -ef | awk '/<defunct>$/ {print $2}'""
    
    # the remote system executes this:
    bash -c "ps -ef | awk '/<defunct>$/ {print $2}'"
    
    # bash executes this:
    ps -ef | awk '/<defunct>$/ {print $2}'
    

    或者更好的是,在ps -el使用第二列,这将成为Z僵尸进程:

    ssh rmthost "bash -c "ps -el | awk '/^. Z / {print $4}'""
    
    # the remote system executes this
    bash -c "ps -el | awk '/^. Z / {print $4}'"
    
    # bash executes this:
    ps -el | awk '/^. Z / {print $4}'
    
    链接地址: http://www.djcxy.com/p/57133.html

    上一篇: quoting and escaping of a ssh command line

    下一篇: Write special character in bash string