Am minimalistischsten - Ansatz Nr. 4 und Nr. 3, beide könnten in Funktion umgewandelt werden; # 2 mein Favorit - awk
. Nr. 1 verwendet script
Befehl - ein sehr vielseitiges Tool, das für die Aufzeichnung von Befehlszeilen im Allgemeinen nützlich ist. überall einsetzbar, für alles, was Sie aufnehmen möchten.
Ansatz Nr. 1:
Es gibt einen /usr/bin/script
Befehl (der standardmäßig mit ubuntu geliefert wird) für die Aufzeichnung der Befehlszeilenausgabe, der zusammen mit der Eingabeaufforderung und dem Befehl alles erfasst. Um nur einen Befehl und seine Ausgabe in einer bestimmten Datei zu speichern, verwenden Sie -c
flag und geben Sie die Ausgabedatei an. Beispiel
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秒
Ansatz Nr. 2: awk hackery
Awk hat eine system()
Funktion, mit der Sie Shell-Befehle über ein awk
Skript oder einen Befehl ausführen können . Die Ausgabe wird auf dem Bildschirm angezeigt, Befehl zuerst, Ausgabe als nächstes. Um das, was Sie sehen, in eine Datei umzuleiten, verwenden Sie>
Operator.
Dies kann auf zwei Arten erfolgen: Bitten Sie den Benutzer, Daten über stdin oder als Befehlszeilenargument einzugeben. Erstens ist es einfacher, dies zu erreichen, weshalb es veröffentlicht wird.
(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) Befehlszeilen-Args-Version; Ohne Ausgabe, um zu vermeiden, dass die Antwort zu lange dauert. Wieder anhängen >
, um zur Datei umzuleiten
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Ansatz 3: Bitten Sie bash, den Job für Sie zu erledigen
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
Weiterleitung zur Datei mit >
Operator:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Ansatz 4: (mein zweiter Favorit)
Inspiriert von ByteCommanders Beitrag; Wir können read
die erforderlichen Befehle in der Subshell verwenden und dann ausführen
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Probelauf:
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
Ansatz 5:
Verwenden Sie echo
oder here string
(aka <<< "string"
), um Argumente für sh -c
through bereitzustellenxargs
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
Und wenn Sie möchten, können Sie diesen Trick auch mit einem Alias verwenden:
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 {}; {}"'