가장 미니멀리즘-접근법 # 4와 # 3은 둘 다 기능으로 변환 될 수 있습니다. # 2 내가 좋아하는 것- awk
. # 1 script
명령을 사용합니다 -일반적으로 명령 행을 기록하는 데 유용한 매우 다양한 도구입니다. 기록하고자하는 모든 곳에서 적용 가능합니다.
# 1에 접근 :
가 /usr/bin/script
프롬프트 및 명령과 함께 명령 줄 출력을 캡처의 모든 것을 기록 (기본적으로 우분투와 함께 제공) 명령. 하나의 명령과 해당 출력을 특정 파일에 저장하려면 -c
플래그를 사용하고 출력 파일을 지정하십시오. 예
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秒
접근법 # 2 : awk hackery
Awk에는 스크립트 또는 명령 에서system()
쉘 명령을 실행할 수있는 기능이 있습니다 . 출력은 화면에 명령이 먼저 표시되고 다음에 출력이 표시됩니다. 보이는 것을 파일로 리디렉션하려면 연산자를 사용하십시오 .awk
>
그것은 두 가지 방법으로 수행 될 수 있습니다-사용자에게 stdin 또는 명령 줄 인수로 물건을 입력하도록 요청하십시오. 첫 번째는 달성하기가 쉽기 때문에 게시하는 것입니다.
(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) 명령 행 인수 버전; 너무 긴 답변을 피하기 위해 출력을 포함하지 않습니다. 다시 >
파일로 리디렉션에 추가
awk 'BEGIN{for (i=1; i<= ARGC; i++) myString = myString" "ARGV[i]; print myString; system(myString) }' apt-cache depends gnome-terminal
접근법 # 3 : bash에게 작업을 요청하십시오.
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
>
연산자 를 사용하여 파일로 리디렉션 :
bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
접근법 # 4 :( 나의 두번째 좋아하는)
ByteCommander의 게시물에서 영감을 얻었습니다. read
서브 쉘에서 필요한 명령을 사용 하고 실행할 수 있습니다
read command && (printf "COMMAND: %s" "$command";printf "\n+++++++\n"; sh -c "$command")
샘플 실행 :
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
접근법 # 5 :
echo
또는 here string
(일명 <<< "string"
)을 사용 sh -c
하여xargs
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
그리고 원하는 경우 별칭과 동일한 트릭을 사용할 수 있습니다.
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 {}; {}"'