2009-05-25 10 views
0

J'ai le code suivant qui devrait mettre des programmes démarrables dans Bash.Impossible d'avoir des programmes protégés '0700' démarrables à la connexion dans 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 

Cependant, cela ne fonctionne pas du tout dans mon Zsh. Je peux ouvrir aucun programme avec.

Un autre bug qu'il a est qu'il ouvre tous les programmes. Je veux avoir des programmes que les autorisations amorçable est 700.

Je sais que vous pouvez rechercher ces programmes plutôt bien par

find -perm 700 -type f *.app 

Cependant, je ne pouvais pas trouver mon -command fonctionne exactement pour chaque fichier de programme . Cela me suggère qu'il pourrait y avoir une meilleure façon de rendre les programmes possibles dans le terminal.

Comment faire pour que les programmes puissent démarrer dans Zsh sous Mac/Ubuntu?

+0

Pouvez-vous expliquer plus clairement ce que tu veux? Vous pouvez démarrer n'importe quelle application depuis la ligne de commande avec 'open', essayez-vous d'automatiser cela? Autrement dit, voulez-vous taper "iTunes" et faire en sorte que le shell s'exécute "open /Applications/iTunes.app", mais seulement si iTunes/Contents/MacOS/iTunes dispose de 700 permissions? – JimG

+0

@JimG: Oui, je le veux. –

Répondre

2

Comment vous sentez-vous sur les alias au lieu de l'achèvement? Les alias sont toujours terminés. Le travail à travers des lignes pour le rendre plus facile à lire ...

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

Les premières impressions chaque match sur sa propre ligne, la seconde supprime les sous-paquets d'une application, et la dernière génère la commande d'alias. Supprimez les backticks pour voir et confirmer les commandes générées.

[Edit:] Cela va l'exécutable directement - si vous préférez utiliser la méthode « blah.app ouverte », vous pouvez changer la dernière partie de la commande sed:

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

Oh, zsh. Cela rend toujours les choses intéressantes.

Mais il existe certaines techniques pour faciliter le débogage de ce genre de choses. La première chose que je voudrais donc est-éloigner de ls et utiliser find à la place, puisque vous voulez, pas d'énumérations noms de fichiers lisibles par l'homme:

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

peut-être ....

Questions connexes