2009-05-25 61 views
0

我有下面的代码应该把程序在Bash中启动。在Zsh登录时无法启动'0700'保护程序

if [ "`uname`" = "Darwin" ]; then 
    compctl -f -x 'p[2]' -s "`/bin/ls -d1 /Applications/*/*.app 
/Application:/*.app | sed 's|^.*/\([^/]*\)\.app.*|\\1|;s/ /\\\\ /g'`"     
-- open 
    alias run='open -a' 
fi 

但是,它在我的Zsh中根本不起作用。我可以用它打开任何程序。

它的另一个缺陷是它会打开所有程序。 我想只有程序启动的哪些权限是700

我知道,你可以通过

find -perm 700 -type f *.app 

搜索这些程序相当好不过,我不能让我找到-command每个程序文件的工作完全。这意味着我可能会有更好的方式让程序在终端启动。

如何让程序在Mac/Ubuntu的Zsh中可以启动?

+0

你能解释更多清楚你想要什么?你可以用'open'从命令行启动任何应用程序,你是否试图自动执行此操作?也就是说,你是否想要键入'iTunes'并让shell运行'打开/Applications/iTunes.app',但是只有当iTunes/Contents/MacOS/iTunes拥有700个权限? – JimG 2009-05-25 23:44:05

回答

2

你怎么看待别名而不是完成?别名仍然完整。跨行拆分,使其更易于阅读...

`print -l /Applications/**/MacOS/*(*f:700:) | 
grep -v "Contents.*Contents" | 
sed -e "s#\(.*/\)\([^./]*\)\(\.app\)\(.*\)#alias \2=\"\1\2\3\4\"#g"` 

的第一印像对自己的行每场比赛,第二删除一个应用程序的子包,最后产生alias命令。删除反引号以查看并确认生成的命令。

[编辑:]这直接运行可执行文件 - 如果你更喜欢使用“开放blah.app”的方法,你可以改变的sed命令的最后部分:

#alias \2=\"open \1\2\3\"# 
2

哦,zsh。这总是让事情变得有趣。

但是有一些技术可以使这些事情更容易调试。我就这么从ls搬走,并用find代替,因为你要的路径名,而不是人类可读列表的第一件事:

find . -executable -a -name \*.app 

也许....