En minimalist - yaklaşım # 4 ve # 3, her ikisi de işleve dönüştürülebilir; # 2 benim favorim awk
. # 1 script
komutu kullanır - genel olarak komut satırını kaydetmek için çok yönlü bir araç; kaydetmek istediğiniz her yerde kullanılabilir.
Yaklaşım # 1:/usr/bin/script
Komut satırı çıktısını kaydetmek için, komut istemi ve komutla birlikte her şeyi yakalayan
bir komut (varsayılan olarak ubuntu ile birlikte gelir) vardır. Sadece bir komutu ve çıktısını belirli bir dosyaya kaydetmek için flag'i kullanın -c
ve çıktı dosyasını belirtin. Misal
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秒
Yaklaşım # 2: awk hackery
Awk sahip system()
kabuk komutları çalıştıran izin verir işlevi gelen awk
komut dosyası veya komuta . Çıktı ekranda görünecek, önce komut, sonra çıktı. Gördüklerinizi bir dosyaya yeniden yönlendirmek için >
işleci kullanın .
Bu iki şekilde yapılabilir - kullanıcıdan stdin'den veya komut satırı argümanı olarak bir şeyler girmesini isteyin. Birincisi elde etmek daha kolaydır, bu yüzden bunu gönderir.
(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) Komut satırı argümanlar sürümü; Çok uzun cevap vermemek için çıktı dahil değil. Yine, >
dosyaya yönlendirmeye ekleyin
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Yaklaşım # 3: Bash'tan işi sizin için yapmasını isteyin
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
>
Operatöre dosyaya yönlendir :
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Yaklaşım # 4: (ikinci favorim)
ByteCommander'ın gönderisinden ilham aldı; read
alt kabukta gerekli komutları kullanabilir ve çalıştırabiliriz
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Örnek çalışma:
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
Yaklaşım # 5:
Kullanım echo
veya here string
(aka <<< "string"
) argümanlar sunmak sh -c
yoluylaxargs
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
Ve isterseniz, aynı hileyi bir takma adla kullanabilirsiniz:
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 {}; {}"'