Estoy tratando de configurar algunos atajos de teclado que abren sesiones específicas de iTerm, lo que pude hacer con BetterTouchTool y un poco de magia AppleScript. El problema es que OS X insiste en abrir una ventana de Terminal para cualquier script de shell que ejecute a través de la GUI (es decir, desde Finder, o como un atajo de teclado desde BetterTouchTool). La ventana de terminal no aparece si ejecuto el script directamente desde otro terminal.
Una solución alternativa que encontré fue envolver el script en un directorio .app, que resuelve el problema de la ventana de terminal superflua, pero tiene otros problemas (por ejemplo, OS X parece tratar cada ventana iTerm resultante como una aplicación separada, abarrotando mi base) ) (EDITAR: este comportamiento en realidad fue causado por un error en mi script, ver más abajo)
También intenté asignar la aplicación Terminal a otro escritorio virtual en la configuración de Espacios en un intento de moverlo fuera de la vista, pero luego solo cambiará a ese escritorio antes de ejecutar el script.
¿Hay alguna manera de deshabilitar este comportamiento por completo? Ya encontré la configuración en las preferencias de Terminal para cerrar la ventana después de que el script haya terminado, pero sigue siendo molesto que aparezca la ventana de Terminal por un segundo.
fuente
Respuestas:
Abra Automator , elija Aplicación , agregue una acción Ejecutar script de Shell y coloque su comando Shell entre comillas (si tiene un archivo, simplemente puede arrastrarlo y soltarlo).
Además de reproducirlo, ahora puede guardarlo (como una aplicación en cualquier lugar) e incluso configurar el icono .
fuente
&
y luego llamar a un AppleScript para llevar la aplicación (en mi casomplayer
) al frente:mplayer myvideo.avi &; osascript -e 'tell application "System Events" to set frontmost of the first process whose displayed name is "mplayer" to true'
mplayer
para reproducir un video desde una presentación de diapositivas (en Skim). Hay un error que el jugador permanece en segundo plano si Skim está configurado para pantalla completa, sin embargo, no estoy seguro de si este error solo está relacionado con Skim o con todas las aplicaciones de pantalla completa, así que pensé que publicaría mi solución aquí.Aquí hay un ejemplo rápido y sucio casi sin esfuerzo (para una aplicación llamada "myapp"):
Haga una jerarquía parcial de aplicaciones:
Asegúrese de que la primera línea de su script tenga la ruta completa al programa necesario, por ejemplo,
Nombre su script de shell "myapp" (sin comillas, sin extensión), dele permisos de ejecución y luego póngalo en el subdirectorio MacOS. Para darle permisos de ejecución:
Vaya al subdirectorio Contenido y cree un archivo PkgInfo que contenga la cadena: APPL ???? [¡sin terminador de línea al final de la cadena!] Use la utilidad cat (1) para crear el archivo:
Después de haber escrito la cadena (¡no presione la tecla de retorno!), Ingrese dos control-D, que cerrarán
el archivo sin terminador de línea y lo regresarán al indicador de comandos de la shell).
Haga doble clic en su nueva "aplicación" desde el buscador. Se ejecutará sin ventana.
fuente
Es posible que desee consultar Platypus , que crea aplicaciones Mac OS X a partir de scripts de shell y otros scripts interpretados.
fuente
Aquí hay una pequeña solución, en caso de que te gusten los lanzadores de aplicaciones como Alfred . Lo uso todos los días y compré el Powerpack , que le permite ejecutar scripts de shell silenciosos.
Estos no abrirán una terminal cuando se ejecuten y pueden vincularse a cualquier secuencia de palabras clave. Incluso pueden incluir parámetros y tienen opciones adicionales:
Lo uso para algunos fragmentos pequeños, y es muy flexible.
fuente
Si agrega una clave
LSUIElement
y la configura1
enInfo.plist
su aplicación, no creará un ícono en Dock.Aquí está
Info.plist
mi pequeña aplicación de script de shell:fuente
touch
el paquete para asegurarme de que se utilizara la versión más nueva. Pero de todos modos, no me gusta mucho el enfoque de paquete porque parece que siempre creará instancias de aplicaciones separadasdo shell script "say 'arsti'"
, esto no abrirá la ventana de terminal.pgrep
, y luego pasa el código relevante directamente aosascript
(el intérprete de AppleScript). El problema es quepgrep
vino de Homebrew y no está en el valor predeterminado$PATH
. Entonces, mi script siempre lanzó una nueva instancia de iTerm, incluso si ya se estaba ejecutando. Después de agregar el camino completopgrep
en el script, el enfoque de paquete parece funcionar bien después de todo, así que creo que estoy feliz por ahora ;-)CFBundleExecutable
yCFBundleIconFile
), conseguí que funcionara perfectamente.Aquí hay una pequeña solución:
Compile un applecript que llame a un script de shell :)
El
osacompile
compilará el'do shell script "XXX"'
fragmento applescript. Su script de shell es el XXX.Tenga cuidado con las citas, el script de shell debe citarse correctamente para superar el shell que está utilizando para compilarlo aún intacto.
Pero esto se puede ejecutar desde BetterTouchTool sin ninguna locura.
fuente
Hay otro entrenamiento posible. Proteja su script de shell en un flujo de trabajo de automatización. Invoque el flujo de trabajo con launchd. El codigo es:
Esto no iniciará ningún programa ni aparecerá en la barra de menú y es mucho más silencioso que una aplicación Platypus.
Una forma aún mejor de ejecutar scripts de shell es directa en launchd.
ejecutará el comando ultra silenciosamente en segundo plano.
fuente