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



当我尝试通过脚本在 ssh 中使用pgrep -f <proc_name>命令时给出了错误的结果。如何解决这个问题?(我用RSA键不问p/w)

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

如果没有更多细节,很难说,但我的猜测是它正在检测bash过程。您这样做的方式,远程 ssh 守护进程正在运行bash -c '<newline>pgrep -f name > p_id<newline>', which then runs pgrep -f 名称(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'

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

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

您通过命令提示符运行了命令,是否与正在执行脚本的同一用户一起运行? 如果不是,则可能是权限。

将 -u 选项放在 pgrep 命令中,用于拥有您要查找的进程的用户。或者尝试在脚本中插入 sudo 命令并以其他用户身份运行 pgrep,该用户具有类似管理员/根的权限。

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

最新更新