Paling minimalis - pendekatan # 4 dan # 3, keduanya dapat dikonversi menjadi fungsi; # 2 favorit saya - awk
. # 1 menggunakan script
perintah - alat yang sangat serbaguna, berguna untuk merekam baris perintah secara umum; berlaku di mana saja, untuk apa pun yang ingin Anda rekam.
Pendekatan # 1:
Ada /usr/bin/script
perintah (yang datang dengan ubuntu secara default) untuk merekam output baris perintah, yang menangkap semuanya, bersama dengan prompt dan perintah. Untuk hanya menyimpan satu perintah dan outputnya ke file tertentu, gunakan -c
flag dan tentukan file output. Contoh
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秒
Pendekatan # 2: awk hackery
Awk memiliki system()
fungsi yang memungkinkan Anda menjalankan perintah shell dari awk
skrip atau perintah . Output akan muncul di layar, perintah pertama, output selanjutnya. Untuk mengarahkan ulang apa yang Anda lihat ke penggunaan file>
operator .
Itu dapat dilakukan dengan dua cara - meminta pengguna untuk memasukkan barang dari stdin atau sebagai argumen baris perintah. Yang pertama lebih mudah untuk dicapai, maka mempostingnya.
(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 baris perintah args; tidak termasuk output untuk menghindari membuat jawaban terlalu lama. Sekali lagi, tambahkan >
untuk mengarahkan ulang ke file
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Pendekatan # 3: minta bash untuk melakukan pekerjaan untuk Anda
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
Redirect ke file dengan >
operator:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Pendekatan # 4: (favorit kedua saya)
Terinspirasi oleh pos ByteCommander; kita bisa menggunakan read
dan menjalankan perintah yang diperlukan dalam subkulit
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Contoh dijalankan:
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
Pendekatan # 5:
Gunakan echo
atau here string
(alias <<< "string"
) untuk memberikan argumen sh -c
melaluixargs
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
Dan jika Anda mau, Anda bisa menggunakan trik yang sama ini dengan 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 {}; {}"'