Lo más minimalista: enfoque # 4 y # 3, ambos podrían convertirse en función; # 2 mi favorito - awk
. # 1 usa el script
comando: herramienta muy versátil, útil para grabar líneas de comando en general; aplicable en cualquier lugar, para lo que quiera grabar.
Enfoque n. ° 1:
hay un /usr/bin/script
comando (que viene con ubuntu por defecto) para grabar la salida de la línea de comandos, que captura todo, junto con el indicador y el comando. Para guardar un comando y su salida en un archivo específico, use el -c
indicador y especifique el archivo de salida. Ejemplo
xieerqi:$ script -c 'apt-cache depends gnome-terminal' outputFile.txt
Script started, file is outputFile.txt
gnome-terminal
Depends: gconf-service
gconf-service:i386
Depends: libatk1.0-0
Depends: libc6
Depends: libgconf-2-4
Depends: libgdk-pixbuf2.0-0
(extra output omitted)
Script done, file is outputFile.txt
xieerqi:$ cat outputFile.txt
Script started on 2015年10月22日 星期四 08时58分46秒
gnome-terminal
Depends: gconf-service
gconf-service:i386
Depends: libatk1.0-0
Depends: libc6
Depends: libgconf-2-4
(extra output omitted)
Script done on 2015年10月22日 星期四 08时58分46秒
Enfoque # 2: hacker de awk
Awk tiene una system()
función que le permite ejecutar comandos de shell desde awk
script o comando . La salida se mostrará en la pantalla, primero el comando, luego la salida. Para redirigir lo que ve a un archivo, utilice el >
operador.
Eso se puede hacer de dos maneras: solicite al usuario que ingrese cosas desde stdin o como argumento de línea de comando. El primero es más fácil de lograr, por lo tanto, publicar eso.
(1) awk 'BEGIN{ print "Enter command to run: "; getline com < "/dev/stdin"; system(com) }'
awk 'BEGIN{ print "Enter command to run: "; getline com < "/dev/stdin"; system(com) }'
Enter command to run:
apt-cache depends gnome-terminal
gnome-terminal
Depends: gconf-service
gconf-service:i386
Depends: libatk1.0-0
Depends: libc6
Depends: libgconf-2-4
Depends: libgdk-pixbuf2.0-0
Depends: libglib2.0-0
(extra output omitted)
(2) Versión de línea de comando args; sin incluir la salida para evitar responder demasiado tiempo. Nuevamente, agregue >
para redirigir al archivo
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Enfoque n. ° 3: pídale a bash que haga el trabajo por usted
xieerqi@eagle:~$ bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND '
apt-cache depends gnome-terminal
gnome-terminal
Depends: gconf-service
gconf-service:i386
Depends: libatk1.0-0
Depends: libc6
Depends: libgconf-2-4
Depends: libgdk-pixbuf2.0-0
Depends: libglib2.0-0
Redireccionar a archivo con >
operador:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Enfoque n. ° 4: (mi segundo favorito)
Inspirado en la publicación de ByteCommander; podemos usar read
y luego ejecutar los comandos necesarios en subshell
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Ejecución de muestra:
xieerqi:$ read command && (printf "COMMAND READ: %s" "$command";printf "\n+++++++\nOUTPUT\n"; sh -c "$command")
printf "This was a triumph; I'm making a note here - huge success"
COMMAND READ: printf "This was a triumph; I'm making a note here - huge success"
+++++++
OUTPUT
This was a triumph; I'm making a note here - huge success
Enfoque # 5:
Use echo
o here string
(aka <<< "string"
) para proporcionar argumentos a sh -c
través dexargs
xieerqi:$ echo "apt-cache policy gnome-terminal" | xargs -I {} bash -c 'echo {}; {}'
apt-cache policy gnome-terminal
gnome-terminal:
Installed: 3.6.2-0ubuntu1
Candidate: 3.6.2-0ubuntu1
Version table:
*** 3.6.2-0ubuntu1 0
500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
100 /var/lib/dpkg/status
Y si quieres, puedes usar este mismo truco con un alias:
xieerqi:$ printAndRun <<< "apt-cache policy gnome-terminal"
apt-cache policy gnome-terminal
gnome-terminal:
Installed: 3.6.2-0ubuntu1
Candidate: 3.6.2-0ubuntu1
Version table:
*** 3.6.2-0ubuntu1 0
500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
100 /var/lib/dpkg/status
xieerqi:$ type printAndRun
printAndRun is an alias for 'xargs -I {} bash -c "echo {}; {}"'