最もミニマル-アプローチ#4および#3、両方とも関数に変換できます。#2私のお気に入り- awk
。#1はscript
コマンドを使用します-非常に用途の広いツールで、一般的なコマンドラインの記録に役立ちます。どこでも、記録したいものに適用できます。
アプローチ#1:/usr/bin/script
コマンドライン出力を記録する
ためのコマンド(デフォルトではubuntuに付属)があり、プロンプトとコマンドとともにすべてをキャプチャします。1つのコマンドとその出力を特定のファイルに保存するには、-c
flagを使用して出力ファイルを指定します。例
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
シェルコマンドを実行できる機能があります。出力は、画面に表示され、最初にコマンドが表示され、次に出力されます。表示されているものをファイルにリダイレクトするには、>
演算子を使用します。
これは2つの方法で実行できます-ユーザーに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:(2番目のお気に入り)
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 {}; {}"'