0

我有以下代码应该可以在 Bash 中启动程序。

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

但是,我无法让我的 find 命令完全适用于每个程序文件。这表明我可能有更好的方法可以让程序在终端中启动。

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

4

2 回答 2

2

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

但是有一些技术可以让调试这些事情变得更容易。我要做的第一件事是远离ls,find而是使用,因为你想要路径名,而不是人类可读的列表:

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

也许....

于 2009-05-26T00:05:01.823 回答
2

您如何看待别名而不是完成?别名仍然选项卡完成。跨行拆分以使其更易于阅读...

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

第一个在自己的行上打印每个匹配项,第二个删除应用程序的子包,最后一个生成别名命令。删除反引号以查看并确认生成的命令。

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

#alias \2=\"open \1\2\3\"#
于 2009-05-26T12:44:46.513 回答