当我尝试通过脚本在 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,该用户具有类似管理员/根的权限。
不要忘记阅读手册页,也许您需要一个选项。