¿Por qué se muestra la salida dos veces?
Eso no es la salida estándar de osascript
lo que ves sino System Events escribiendo "echo 'abc'"
.
Lo ves dos veces porque System Events lo escribe mientras osascript
está corriendo. Cuando osascript
termina y devuelve el control al shell, el shell muestra el nuevo indicador, y también muestra cualquier entrada escrita previamente, en este caso "echo 'abc'"
.
Es decir, no hay ninguna salida estándar que suprimir, es simplemente la forma en que funciona el shell.
Este comportamiento no es exclusivo de osascript
, por ejemplo, si comprimes un archivo grande con el comando zip y escribes algo antes de que zip termine, el texto también se muestra dos veces.
¿Cómo se puede suprimir la "doble salida"?
Puedes suprimir la salida al retrasar ligeramente cuándo se escribe la cadena en la ventana del Terminal. Esto se puede lograr con una función de shell:
-
Abre Terminal.
-
Escribe el siguiente texto y presiona Enter:
function t { zsh -c "osascript -e \"do shell script \\\"/bin/sleep 1\\\"\" -e \"tell application \\\"System Events\\\" to keystroke \\\"${cmd}\\\"\" &"; }
Puedes reemplazar zsh
con bash
en la función anterior si prefieres este último:
function t { bash -c "osascript -e \"do shell script \\\"/bin/sleep 1\\\"\" -e \"tell application \\\"System Events\\\" to keystroke \\\"${cmd}\\\"\" &"; }
(Ambas funciones son totalmente equivalentes y se pueden utilizar indistintamente con tanto zsh
como bash
.)
-
Define cmd
(si no lo haces, la función no escribirá nada):
cmd="echo 'abc'"
-
Ejecuta la función:
t
Ahora, t
devolverá inmediatamente y luego el texto se agregará a la línea actual.
La función funciona con los shells integrados de macOS zsh
y bash
.
Puedes agregar la función a tu archivo de inicio de shell para no tener que escribirla cada vez que abras Terminal:
- Para
zsh
, agrégalo a un archivo llamado .zshrc
en tu carpeta de inicio. Para abrir .zshrc
, escribe open -a TextEdit ~/.zshrc
. Después de agregar la línea, guarda el archivo modificado con S y cierra TextEdit con Q.
- Para
bash
, agrégalo a un archivo llamado .bashrc
en tu carpeta de inicio. Para abrir .bashrc
, escribe open -a TextEdit ~/.bashrc
. Después de agregar la línea, guarda el archivo modificado con S y cierra TextEdit con Q.
¿Cómo funciona la función?
La función ejecuta zsh
(o bash
, si elegiste la segunda función) para enviar el comando osascript
al fondo (eso se hace con el &
al final de la función).
osascript
espera primero medio segundo (para que la función devuelva el control al shell) y luego escribe la cadena.
¿Cómo puedo renombrar la función?
Llamé a la función t
, pero puedes renombrarla reemplazando el t
en function t
, por ejemplo, function typecmd
.