Incapaz de tener 'programas iniciable 0700'-protegido al iniciar la sesión en Zsh
Pregunta
Tengo el siguiente código que debe poner programas iniciable en 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
Sin embargo, no funciona en mi Zsh en absoluto. Puedo abrir ningún programa con ella.
Otro fallo que tiene es que abre todos los programas. Quiero tener sólo los programas iniciable qué permisos es de 700.
Sé que usted puede buscar estos programas bastante bien por
find -perm 700 -type f *.app
Sin embargo, no pude conseguir mi hallazgo -command trabajar exactamente para cada archivo de programa. Esto me sugiere que puede haber una mejor manera de hacer que los programas iniciable en la terminal.
¿Cómo se puede hacer que los programas iniciable en Zsh en Mac / Ubuntu?
Solución
¿Cómo se siente acerca de los alias en lugar de finalización? Los alias todavía pestaña completa. La división a través de líneas para que sea más fácil de leer ...
`print -l /Applications/**/MacOS/*(*f:700:) |
grep -v "Contents.*Contents" |
sed -e "s#\(.*/\)\([^./]*\)\(\.app\)\(.*\)#alias \2=\"\1\2\3\4\"#g"`
Las primeras impresiones de cada uno de los partidos en su propia línea, la segunda elimina sub-paquetes de una aplicación, y el último genera el comando alias. Quitar los acentos abiertos para ver y confirmar los comandos que se generan.
[Editar:] Esto ejecuta el ejecutable directamente - si usted prefiere utilizar el método 'abierto blah.app', podría cambiar la parte final del comando sed a:
#alias \2=\"open \1\2\3\"#
Otros consejos
Oh, zsh. Que siempre hace las cosas interesantes.
Sin embargo, hay ciertas técnicas para hacer la depuración de este tipo de cosas más fáciles. Lo primero que haría es por lo aleje de ls
, y utilizar find
lugar, ya que desea que los nombres de ruta, los listados no por seres humanos:
find . -executable -a -name \*.app
quizás ....