Tối giản nhất - cách tiếp cận # 4 và # 3, cả hai đều có thể được chuyển đổi thành chức năng; # 2 yêu thích của tôi - awk
. # 1 sử dụng script
lệnh - công cụ rất linh hoạt, hữu ích để ghi dòng lệnh nói chung; áp dụng bất cứ nơi nào, cho bất cứ điều gì bạn muốn ghi lại.
Cách tiếp cận # 1:
Có một /usr/bin/script
lệnh (đi kèm với ubfox theo mặc định) để ghi đầu ra dòng lệnh, ghi lại mọi thứ, cùng với dấu nhắc và lệnh. Để chỉ lưu một lệnh và đầu ra của nó vào tệp cụ thể, hãy sử dụng -c
cờ và chỉ định tệp đầu ra. Thí dụ
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秒
Cách tiếp cận # 2: hackk awk
Awk có system()
chức năng cho phép bạn chạy các lệnh shell từ awk
script hoặc lệnh . Đầu ra sẽ hiển thị trên màn hình, lệnh đầu tiên, đầu ra tiếp theo. Để chuyển hướng những gì bạn thấy đến một >
toán tử sử dụng tập tin .
Điều đó có thể được thực hiện theo hai cách - yêu cầu người dùng nhập nội dung từ stdin hoặc làm đối số dòng lệnh. Đầu tiên là dễ dàng để đạt được, do đó gửi bài đó.
(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) Phiên bản dòng lệnh args; không bao gồm đầu ra để tránh trả lời quá lâu. Một lần nữa, nối >
để chuyển hướng đến tập tin
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
Cách tiếp cận số 3: yêu cầu bash thực hiện công việc cho bạn
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
Chuyển hướng đến tập tin với >
toán tử:
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Cách tiếp cận số 4: (yêu thích thứ hai của tôi)
Lấy cảm hứng từ bài viết của ByteCommander; chúng ta có thể sử dụng read
và sau đó chạy các lệnh cần thiết trong subshell
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
Chạy mẫu:
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
Cách tiếp cận số 5:
Sử dụng echo
hoặc here string
(aka <<< "string"
) để cung cấp các đối số sh -c
thông quaxargs
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
Và nếu bạn muốn, bạn có thể sử dụng thủ thuật tương tự với bí danh:
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 {}; {}"'