ssh到脚本中的pgrep -f命令给出了错误的结果。如何解决这个问题

时间:2017-10-21 17:58:58

标签: bash shell

当我尝试在ssh中使用pgrep -f <proc_name>命令时,脚本会产生错误的结果。如何解决这个问题? (我使用RSA密钥不要问p / w)

ssh -l $UNAME $HOST bash -c "'
        pgrep -f name > p_id
        '" 

2 个答案:

答案 0 :(得分:1)

没有更多详细信息很难说,但我的猜测是它正在检测bash进程。你正在这样做,远程ssh守护进程正在运行bash -c '<newline>pgrep -f name > p_id<newline>', which then runs pgrep -f name (with output to the file "p_id"). Note that ps -f searches the entire command line for matches, so the "name" part of the argument to bash`可能与之匹配。

一种选择是使用旧技巧使ps | grep something不与自身匹配:使用[n]ame而不仅仅name。但是你需要引用它,所以引用比现在更加复杂。我只是跳过bash -c部分和一层引用:

,看起来更简单
ssh -l $UNAME $HOST 'pgrep -f name >p_id'

答案 1 :(得分:0)

您没有包含脚本中的任何代码,但首先查看用户权限,它们可能是进程命令返回不同结果的原因。其他潜在的麻烦点是:

检查脚本权限并验证执行选项。确保脚本用户对运行该进程的目录具有正确的权限。

您是通过命令提示符运行命令,是否与执行脚本的用户相同?如果不是,它可能是权限。

在pgrep命令中为拥有您正在查找的进程的用户放置-u选项。或者尝试在脚本中插入sudo命令并以另一个用户身份运行pgrep,一个具有admin / root-like特权的用户。

不要忘记阅读手册页,也许你需要一个选项。