2016-03-04 122 views
2

什么是仅打印正在运行的应用程序(即仅显示在码头上的应用程序)的命令。例如:Bash命令打印当前正在运行的所有应用程序

Chrome 
Microsoft Word 
Microsoft Outlook 
Etc. 

Microsoft Helper App 
Other helper apps not shown on the dock 

是否有标签添加到ps命令或者是有一个完全不同的命令来做到这一点?

+0

虽然它不是一个单一的命令,你可以在*〜/库/首选项/ com.apple.dock解析从plist文件数据。 plist中*。当然,你需要先将它从二进制转换为文本格式。 – TheDarkKnight

+0

@TheDarkKnight:不幸的是,这不起作用,因为只有Dock中显示的应用程序_persistently_在该文件中才能显示 - 它不反映当前正在运行的应用程序。 – mklement0

+0

我可以结合2. – dsiegler19

回答

4

更新:原来有使用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 
+0

将“设置”添加到列表使它工作得很好。 – dsiegler19

+1

完美地工作。 Ty(但不幸的是,这只是我正在做的一小部分)。 – dsiegler19

1

以下是您可以尝试的方法。

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' 

这将显示完整路径的过程。

+0

这是正确的道路,但我仍然得到像bash,java和Microsoft Database Daemon这样的输出,所有这些都是助手应用程序或进程。 – dsiegler19

+0

我不明白为什么'bash'会在正则表达式是'/ Applications'时出现。 – alvits

+0

@ dsiegler19 - 你从'pgrep'中删除了'-f/Applications'吗?或者,也许你用'-f .'替换了'-f/Applications'? – alvits

相关问题