Le plus minimaliste - approche # 4 et # 3, les deux pourraient être convertis en fonction; # 2 mon préféré - awk
. # 1 utilise la script
commande - outil très polyvalent, utile pour enregistrer la ligne de commande en général; applicable partout, pour tout ce que vous voulez enregistrer.
Approche n ° 1:
il existe une /usr/bin/script
commande (fournie avec ubuntu par défaut) pour enregistrer la sortie de ligne de commande, qui capture tout, ainsi que l'invite et la commande. Pour simplement enregistrer une commande et sa sortie dans un fichier spécifique, utilisez l' -c
indicateur et spécifiez le fichier de sortie. Exemple
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秒
Approche n ° 2: piratage awk
Awk a une system()
fonction qui vous permet d'exécuter des commandes shell à partir d'un awk
script ou d'une commande . La sortie apparaîtra sur l'écran, la commande d'abord, la sortie ensuite. Pour rediriger ce que vous voyez vers un >
opérateur d' utilisation de fichier .
Cela peut être fait de deux manières - demandez à l'utilisateur de saisir des éléments depuis stdin ou comme argument de ligne de commande. Le premier est plus facile à réaliser, d'où son affichage.
(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) Version args de la ligne de commande; n'inclut pas la sortie pour éviter de répondre trop longtemps. Encore une fois, ajoutez >
pour rediriger vers le fichier
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Approche n ° 3: demandez à bash de faire le travail pour vous
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
Rediriger vers un fichier avec l' >
opérateur:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Approche n ° 4: (mon deuxième favori)
Inspiré par le post de ByteCommander; nous pouvons utiliser read
puis exécuter les commandes nécessaires en sous-shell
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Exemple d'exécution:
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
Approche n ° 5:
Utilisez echo
ou here string
(aka <<< "string"
) pour fournir des arguments à sh -c
traversxargs
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
Et si vous le souhaitez, vous pouvez utiliser cette même astuce avec 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 {}; {}"'