什么是仅打印正在运行的应用程序(即仅显示在码头上的应用程序)的命令。例如:Bash命令打印当前正在运行的所有应用程序
Chrome
Microsoft Word
Microsoft Outlook
Etc.
但不
Microsoft Helper App
Other helper apps not shown on the dock
是否有标签添加到ps
命令或者是有一个完全不同的命令来做到这一点?
什么是仅打印正在运行的应用程序(即仅显示在码头上的应用程序)的命令。例如:Bash命令打印当前正在运行的所有应用程序
Chrome
Microsoft Word
Microsoft Outlook
Etc.
但不
Microsoft Helper App
Other helper apps not shown on the dock
是否有标签添加到ps
命令或者是有一个完全不同的命令来做到这一点?
更新:原来有使用AppleScript一个简单,可靠的解决方案:
作为一个班轮:
osascript -e 'set text item delimiters to "\n"' -e 'tell application "System Events" to (name of every application process whose background only is false) as string' | sort
更可读的版本:
osascript -e 'set text item delimiters to "\n"' \
-e 'tell application "System Events" to ¬
(name of every application process whose background only is false) as string' | sort
set text item delimiters to "\n"
告诉AppleScript在将列表转换为字符串时,用\n
(换行符)将列表项分开。
的tell application "System Events" to ...
命令的心脏,name of every application process whose background only is false
返回从应用不设计为在后台运行的应用程序的列表。
原始,脆弱的答案:
除非你深入挖掘比使用命令行实用程序为单独运行的应用程序,以确定他们是否有一个UI,你需要求助于启发式,例如排除文件名中某些词的匹配(helper
,...) - 这将永远不会完全健壮。
下面是它的另一种尝试,以补充alvits' helpful answer:
pgrep -fl '.*/Applications/.*\.app/Contents/' |
sed -E 's:^[0-9]+ .*/([^/]+)\.app[[:>:]].*$:\1:' |
grep -Evi 'helper|daemon|service|handler|settings' |
sort -u
将“设置”添加到列表使它工作得很好。 – dsiegler19
完美地工作。 Ty(但不幸的是,这只是我正在做的一小部分)。 – dsiegler19
以下是您可以尝试的方法。
ps -c -o comm -p $(pgrep -u $USER -d, -f /Applications) | grep -Ev 'Helper|handler'
这将显示您发布的流程。
内部$(pgrep -u $USER -d, -f /Application)
将打印由逗号分隔的由用户$USER
拥有的进程的PID
。
外部ps
将打印-p ...
中进程标识列表标识的进程。
-o comm
告诉ps
只打印进程名称。
-c
告诉ps
排除进程的路径名。
或者
ps -u $USER -o comm | grep /Applications | grep -Ev 'Helper|handler'
这将显示完整路径的过程。
这是正确的道路,但我仍然得到像bash,java和Microsoft Database Daemon这样的输出,所有这些都是助手应用程序或进程。 – dsiegler19
我不明白为什么'bash'会在正则表达式是'/ Applications'时出现。 – alvits
@ dsiegler19 - 你从'pgrep'中删除了'-f/Applications'吗?或者,也许你用'-f .'替换了'-f/Applications'? – alvits
虽然它不是一个单一的命令,你可以在*〜/库/首选项/ com.apple.dock解析从plist文件数据。 plist中*。当然,你需要先将它从二进制转换为文本格式。 – TheDarkKnight
@TheDarkKnight:不幸的是,这不起作用,因为只有Dock中显示的应用程序_persistently_在该文件中才能显示 - 它不反映当前正在运行的应用程序。 – mklement0
我可以结合2. – dsiegler19