【问题标题】:Using variables and multiple pips in bash?在 bash 中使用变量和多个点?
【发布时间】:2015-02-06 15:10:09
【问题描述】:

我正在尝试完成一个维护脚本,但我正在赶上以下行:

PUID=$(ps aux | grep $PID | grep -v $USER| cut -d' ' -f1)

我正在尝试从ps aux 命令中提取特定的进程 ID ($PID),(同时忽略用户刚刚使用相同 PID 创建的进程),然后删除除用户名之外的所有进程进程所有者。

目前,该命令在命令行中运行时运行良好,但是我在将其分配给变量$PUID 时遇到问题,甚至只是将其作为命令执行。有什么建议吗?

编辑:

我正在尝试解决这个问题,我相信在传递变量 $PID 时仍然存在问题,现在它正在使用此行从文件中提取(它正确执行)

PID=$(cat /nfs/pdx/home/komcconx/PID/current/pid)

如果我添加一个 echo $PID,它会返回正确的 pid。

当我运行命令 PUID=$(ps -p $PID -o uname=) 时,我收到一条错误消息“错误:进程 ID 列表语法错误”。如果我用“1”代替 $PID 运行命令,它会正确返回“root”

有什么想法吗?'

最终编辑:

发现问题是 PID 是从 DOS 文件中提取的,我尝试使用 DOS 换行符运行命令,此问题已解决!

【问题讨论】:

  • 哦,糟糕,当我试图专注于至少让第一个 grep 工作时,我把它放在里面了。

标签: bash grep pipeline


【解决方案1】:

如果你只想要一个进程的用户名,你可以使用 -o 选项:

PUID=$(ps -p $PID -o uname=);
echo $PUID

【讨论】:

  • ps的不同版本之间的选项处理差异很大;请查阅本地手册页以了解您机器上的正确语法。
  • 不要使用旧的和过时的反引号,使用这样的括号:PUID=$(ps -p $PID -o uname=)(也不需要最后的;
  • 嘿,伙计们,我正在努力解决这个问题,我相信在传递变量 $PID 时仍然存在问题,现在它正在使用这个从文件中提取(它可以正常工作)行
  • 嘿,伙计们,我正在努力解决这个问题,我相信在传递变量 $PID 时仍然存在问题,现在它正在使用这个从文件中提取(它可以正常工作)行 PID=$(cat /nfs/pdx/home/komcconx/PID/current/pid) 如果我添加 echo $PID 它会返回正确的 pid。当我运行命令 PUID=$(ps -p $PID -o uname=) 时,我收到一条错误消息“错误:进程 ID 列表语法错误”。如果我用“1”代替 $PID 运行命令,它会正确返回“root”有什么想法吗?
  • @dustyblade 打印文件内的内容:nfs/pdx/home/komcconx/PID/current/pid 在帖子中。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多