Impossibile avere 'programmi startable 0700'-protetto al login in Zsh
Domanda
Ho il seguente codice che dovrebbe mettere i programmi avviabile in 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
Tuttavia, non funziona nel mio Zsh a tutti. Posso aprire nessun programma con esso.
Un altro bug che si ha è che si apre tutti i programmi. Voglio avere solo programmi avviabile che i permessi è di 700.
Lo so che è possibile cercare questi programmi piuttosto bene da
find -perm 700 -type f *.app
Tuttavia, non ho potuto ottenere il mio ritrovamento -command lavorare esattamente per ogni file di programma. Questo mi suggerisce che ci potrebbe essere un modo migliore per rendere i programmi avviabile nel terminale.
Come si fa a rendere i programmi avviabile in Zsh in Mac / Ubuntu?
Soluzione
Come ti senti sugli alias al posto di completamento? Gli alias scheda ancora completa. Splitting attraverso le linee per rendere più facile la lettura ...
`print -l /Applications/**/MacOS/*(*f:700:) |
grep -v "Contents.*Contents" |
sed -e "s#\(.*/\)\([^./]*\)\(\.app\)\(.*\)#alias \2=\"\1\2\3\4\"#g"`
Le prime stampe ogni partita su una riga, la seconda rimuove sotto-pacchetti di un app, e l'ultimo genera il comando alias. Rimuovere le apici inversi per vedere e confermare i comandi che vengono generati.
[Modifica:] Questo viene eseguito il file eseguibile direttamente - se si preferisce utilizzare il metodo 'aperto blah.app', è possibile modificare la parte finale del comando sed per:
#alias \2=\"open \1\2\3\"#
Altri suggerimenti
Oh, zsh. Questo rende sempre le cose interessanti.
Ma ci sono alcune tecniche per fare il debug di questo genere di cose più facili. La prima cosa che vorrei è così allontanarsi dalla ls
, e utilizzare find
invece, dal momento che si desidera percorsi, elenchi non leggibili:
find . -executable -a -name \*.app
forse ....