Najbardziej minimalistyczne - podejście nr 4 i nr 3, oba można przekształcić w funkcje; # 2 mój ulubiony -awk . # 1 używa scriptpolecenia - bardzo wszechstronnego narzędzia, przydatnego do nagrywania wiersza poleceń w ogóle; ma zastosowanie w dowolnym miejscu i do wszystkiego, co chcesz nagrać.
Podejście nr 1:
istnieje/usr/bin/script polecenie (domyślnie dostarczane z Ubuntu) do nagrywania danych wyjściowych z wiersza poleceń, które przechwytuje wszystko, wraz z monitem i poleceniem. Aby zapisać tylko jedno polecenie i jego wynik w określonym pliku, użyj -cflagi i określ plik wyjściowy. Przykład
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秒
Podejście nr 2: hackery awk
Awk ma system()funkcję, która pozwala na uruchamianie poleceń powłoki zawk skryptu lub polecenia . Wyjście pojawi się na ekranie, najpierw polecenie, następnie następne. Aby przekierować to, co widzisz, do >operatora pliku, użyj .
Można to zrobić na dwa sposoby - poproś użytkownika o wprowadzenie danych ze standardowego wejścia lub argumentu wiersza poleceń. Pierwszy jest łatwiejszy do osiągnięcia, stąd opublikowanie go.
(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) Wersja argumentów linii poleceń; bez uwzględnienia danych wyjściowych, aby uniknąć zbyt długich odpowiedzi. Ponownie dołącz >do przekierowania do pliku
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Podejście nr 3: poproś bash o wykonanie pracy za ciebie
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
Przekieruj do pliku z >operatorem:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Podejście 4: (mój drugi ulubiony)
Zainspirowany postem ByteCommander; możemy użyć, reada następnie uruchomić niezbędne polecenia w podpowłoce
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Przykładowy przebieg:
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
Podejście nr 5:
Użyj echolub here string(aka <<< "string"), aby podać argumenty sh -cpoprzezxargs
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
A jeśli chcesz, możesz użyć tej samej sztuczki z aliasem:
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 {}; {}"'