2009-05-25 6 views
0

Ich habe den folgenden Code, der Programme in Bash startbar machen soll."0700" geschützte Programme können beim Anmelden in Zsh nicht gestartet werden.

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 

Allerdings funktioniert es überhaupt nicht in meiner Zsh. Ich kann damit keine Programme öffnen.

Ein anderer Fehler, den es hat, ist, dass es alle Programme öffnet. Ich möchte nur Programme startbar, welche Berechtigungen ist 700.

Ich weiß, dass Sie diese Programme suchen können recht gut durch

find -perm 700 -type f *.app 

aber ich konnte nicht meine Entdeckung bekommen -command funktionieren genau für jede Programmdatei . Das deutet darauf hin, dass es möglicherweise einen besseren Weg gibt, Programme im Terminal startbar zu machen.

Wie können Sie Programme in Zsh in Mac/Ubuntu startbar machen?

+0

Können Sie mehr erklären klar was du willst? Sie können jede App über die Befehlszeile mit 'Öffnen' starten. Versuchen Sie dies zu automatisieren? Das heißt, möchtest du "iTunes" eingeben und die Shell "open /Applications/iTunes.app" ausführen lassen, aber nur, wenn iTunes/Inhalte/MacOS/iTunes 700 Berechtigungen hat? – JimG

+0

@ JimG: Ja, das will ich. –

Antwort

2

Wie Sie Aliase fühlen statt Fertigstellung? Die Aliase Tab noch vervollständigen. Splitting über die Leitungen, um es leichter zu lesen ...

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

Erstdrucke jedes Spiel in einer eigenen Zeile, die zweiten entfernt Teilpakete einer App, und die letzten erzeugt den Alias-Befehl. Entfernen Sie die Backticks, um die generierten Befehle zu sehen und zu bestätigen.

[Edit:] Dies läuft die ausführbare Datei direkt - wenn Sie es vorziehen, die ‚offene blah.app‘ Methode zu verwenden, können Sie den letzten Teil des sed-Befehl ändern könnte:

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

Oh, zsh. Das macht die Dinge immer interessant.

Aber es gibt bestimmte Techniken, um das Debuggen dieser Art von Dingen einfacher zu machen. Das erste, was ich würde so weg von ls bewegen, und find stattdessen verwenden, da Sie Pfadnamen wollen, nicht in lesbarer Form Inserate:

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

vielleicht ....