Più minimalista - approccio n. 4 e n. 3, entrambi potrebbero essere convertiti in funzione; # 2 il mio preferito - awk
. # 1 usa il script
comando - strumento molto versatile, utile per registrare la linea di comando in generale; applicabile ovunque, per qualunque cosa tu voglia registrare.
Approccio n. 1:
esiste un /usr/bin/script
comando (fornito di default con Ubuntu) per la registrazione dell'output della riga di comando, che cattura tutto, insieme al prompt e al comando. Per salvare un solo comando e il suo output in un file specifico, utilizzare -c
flag e specificare il file di output. Esempio
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秒
Approccio n. 2: hacker awk
Awk ha una system()
funzione che consente di eseguire comandi shell da awk
script o comando . L'output apparirà sullo schermo, comando prima, output successivo. Per reindirizzare ciò che vedi a un file usa>
operatore.
Ciò può essere fatto in due modi: chiedi all'utente di inserire elementi da stdin o come argomento da riga di comando. Il primo è più facile da ottenere, quindi pubblicandolo.
(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) Versione args della riga di comando; non includere l'output per evitare di rispondere troppo a lungo. Ancora una volta, aggiungi >
per reindirizzare al file
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Approccio n. 3: chiedi a bash di fare il lavoro per te
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
Reindirizzare al file con l' >
operatore:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Approccio n. 4: (il mio secondo preferito)
Ispirato al post di ByteCommander; possiamo usare read
e quindi eseguire i comandi necessari in subshell
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Esecuzione di esempio:
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
Approccio n. 5:
Utilizzare echo
o here string
(aka <<< "string"
) per fornire argomenti sh -c
attraversoxargs
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
E se vuoi, puoi usare questo stesso trucco 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 {}; {}"'