gpt4 book ai didi

macos - 当路径包含空格时,获取正在运行的进程的路径

转载 作者:行者123 更新时间:2023-12-03 17:00:56 31 4
gpt4 key购买 nike

我正在 macOS cocoa 应用程序中使用控制台命令运行 NSTask 来确定正在运行的进程的路径

但是,如果路径包含空格,我在解析路径时遇到问题

ps -ax | grep FMCore
10880 ?? 0:50.37 /Applications/Suitcase Fusion.app/Contents/Resources/FMCore -standalone
11420 ttys004 0:00.00 grep FMCore

如果我想使用awk,它会在路径空格上分割,这是不希望的

ps -ax | grep FMCore | awk '{print $4}'
/Applications/Suitcase
grep

如何仅获取路径,在本例中为

/Applications/Suitcase Fusion.app/Contents/Resources/FMCore

最佳答案

看起来您只需要命令列的一部分,直到 FMCore 的所有行以及下一个空格。

您可以使用ps -Ao命令直接获取cmd列(在Linux中,它是ps -e -o cmd),然后抓取包含的行>FMCoregrep [F]MCore,然后删除 FMCore 之后的所有内容以及其后的任何 0+ 非空白字符

ps -Ao command | grep [F]MCore | sed 's/\(FMCore[^[:space:]]*\).*/\1/'

使用[F]MCore而不是FMCore以避免列出grep命令详细信息。

的/\(FMCore[^[:space:]]*\).*/\1/' sed 命令将匹配 FMCore + 将字符串放入第 1 组后的任何 0+ 个非空格字符,.* 将仅匹配字符串的其余部分,而 \1 占位符会将带有空格的 FMCore 放回到结果中。

也可以在获取 cmd 字符串后使用 awk 来抓取所有字段,直到第一个具有 FMCore 的字段:

ps -Ao command | awk '/FMCore/{s=""; for (i=1;i<=NF;i++) if ($i !~ /FMCore/) {s=s $i" "} else {s=s $i; break}; print s}'

关于macos - 当路径包含空格时,获取正在运行的进程的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58588627/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com