2009-05-25 90 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 

也許....

相關問題