Respuestas:
Google encuentra esto . ¿Es lo que buscas?
Si tuviera que automatizar la interacción entre humanos y TTY, preferiría hacerlo con Expect .
bash
contiene todas las utilidades que realmente necesitas. Si desea ejecutar varios comandos con un solo comando, puede escribir sus propios scripts de shell o escribir funciones .
Hace unos días, definí una función cs
para cambiar el directorio y enumerarlo a través de ls
.
function cs() { cd $1 && ls ; }
$1
Es el primer argumento. Si desea usar la lista de todos los argumentos, use $@
.
Se puede invocar como
$ cs my_directory
Esto es genial para agrupar rápidamente varios comandos dentro de su sesión actual. Puede colocar la función al final de su ~/.bashrc
para cargarla con cada nueva instancia de bash
.
Los scripts se ejecutan en su propio proceso. Esto significa que cualquier variable que asigne es local para este proceso. Para escribir un guión, coloque un shebang en la parte superior. Consiste en los caracteres #!
seguidos por la ruta al intérprete que ejecutará su archivo. Shebangs podrían incluir
#!sh
#!/bin/bash
#!/usr/bin/perl
En un script de shell, podría hacer cosas como
#!/bin/bash
VARIABLE=42
echo "The variable is $VARIABLE" # echo appends a newline
echo "I'm now going to Google"
firefox http://www.google.com
No olvide hacer que el script sea ejecutable a través de
$ chmod +x my_script
Luego se puede ejecutar como
$ ./my_script # from the current directory
$ ~/path/to/my_script # absolute path, ~ is your User directory.
La sintaxis bash contiene condicionales, bucles e interruptores y casi cualquier cosa. Si detesta el bajo rendimiento o si necesita una sintaxis más agradable, puede aprender fácilmente algunas líneas de Perl o Python.
Estas soluciones dependen de saber lo que quiere hacer antes de hacerlo. Si este no es el caso, puede mirar el archivo de historial ( ~/.bash_history
por defecto) o usar el history
comando.
$ history 5
enumera los 5 últimos comandos, con un número corriente. En mi caso, esto da
1892 function foo() { cd $1 ; ls ; }
1893 foo ..
1894 history
1895 history 15
1896 history 5
Puede usar fácilmente esta lista de comandos para escribir una función o un script de shell.
Aquí hay una solución para la grabación de macros. Utiliza dos funciones definidas por el usuario y un script perl en línea para realizar el procesamiento interesante.
function create-marker() { echo "Starting the recording" ; }
function process-marker() { history | perl -ne's/^\s*\d*\s*//; chomp; push @commands, $_; }{ pop @commands; push @macro, pop @commands until $commands[-1] eq "create-marker" or !@commands; print "$_\n" for reverse @macro;' ; }
Esta sesión
$ create-marker
Starting the recording
$ cd ~
$ ls
# omitted
$ firefox http://www.google.com
$ process-marker
Crea el siguiente resultado:
cd ~
ls
firefox http://www.google.com
Luego puede copiarlo y pegarlo fácilmente en un nuevo script.
Nota: No tengo una Mac y probé esto en Ubuntu. Los caminos pueden diferir, pero los conceptos son sólidos.
Es poco probable que le interese si no es un usuario, pero emacs tiene un modo shell ( M-x shell
) que, por supuesto, admite los comandos normales de edición de emacs, incluidas las macros de teclado ( C-x (
para comenzar a grabar, C-x )
detener y luego C-x e
ejecutar). Si todo lo que está haciendo es repetir un montón de mecanografía, esto puede ser útil.
Pero, en términos más generales, estoy de acuerdo con bobah: usted no declara el problema que está tratando de resolver, pero es casi seguro que es algo más adecuado para herramientas como esperar que la falsificación de datos sin procesar ...
Sé que estás pidiendo esto para la Terminal, pero como no he oído hablar de tal programa, una alternativa sería la Terminal ZOC . Es comercial, por lo que puede que no esté en tu callejón, pero es lo más parecido en lo que puedo pensar, dada la descripción de tu problema. Admite el uso de un shell local en Mac OS (esencialmente un reemplazo para el terminal) y tiene una función de grabación de script (menú Script -> Grabar Scipt). También puede asignar estos scripts (o textos más cortos) en botones y combinaciones de teclas.