2009-05-25 4 views
0

У меня есть следующий код, который должен запускать программы в Bash.Невозможно запустить программы с защитой 0700. При входе в Zsh

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 работать именно для каждого файла программы , Это говорит о том, что может быть лучший способ запускать программы в терминале.

Как вы можете создавать программы в Zsh в Mac/Ubuntu?

+0

Можете ли вы объяснить более ясно, что вы хотите? Вы можете запустить любое приложение из командной строки с помощью «open», пытаетесь ли вы его автоматизировать? То есть, вы хотите ввести «iTunes» и запустить оболочку «open /Applications/iTunes.app», но только если у iTunes/Contents/MacOS/iTunes было 700 разрешений? – JimG

+0

@JimG: Да, я хочу этого. –

ответ

2

Как вы относитесь к псевдонимами вместо завершения? Псевдонимы все еще заполнены. Расщепление по линии, чтобы сделать его легче читать ...

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

Первые отпечатки каждый матч на своей собственной линии, второй удаляет суб-пакеты приложения, а последний генерирует команду псевдоним. Удалите обратные выходы, чтобы увидеть и подтвердить команды, которые сгенерированы.

[Edit:] Это запускает исполняемый файл напрямую - если вы предпочитаете использовать метод «открытого blah.app», вы можете изменить конечную часть SED команды для:

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

О, zsh. Это всегда делает вещи интересными.

Но есть некоторые способы облегчить отладку таких вещей. Первое, что я бы так и есть отойти от ls, и использовать find вместо этого, так как вы хотите, а не имена путей человеческого считываемых списков:

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

возможно ....

 Смежные вопросы

  • Нет связанных вопросов^_^