以下のようなテキストファイルにコマンドのリストがあると仮定します(cat cmdlist.txt
):-
cut
lshw
top
awk
sensors
ここで、whatis cut
、whatis lshw
などによってそのコマンドの簡単な情報を取得し、whatis <commadnd>
のこれらの出力をcmdinfo.txt
と言うテキストファイルに出力したい
cmdinfo.txt
の望ましい出力(cat cmdinfo.txt
):-
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and text processing language
sensors (1) - print sensors information
cmdinfo.txt
からのコマンドに対してwhatis
の出力でcmdlist.txt
ファイルを実現するにはどうすればよいですか?
これはsample txtファイルのみです
必要に応じて、簡単なスクリプトを提案してください。
可能な限りシンプル:
xargs whatis < cmdlist.txt > cmdinfo.txt
もっとシンプルなもの、
$ while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and text processing language
sensors (1) - print sensors information
以下のコマンドを使用して、結果をファイルに書き込みます。
while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
非常に簡単に:
_for i in $(cat cmdlist.txt); do whatis $i ; done > cmdinfo.txt
_
これは、$(cat cmdlist.txt)
の出力のすべてのエントリ(i
)をループし、エントリでwhatis
を実行します。出力例:
_cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and processing language
sensors (1) - print sensors information
_
N.B。多くの例でi
が使用されていることがわかりますが、使用する必要はありません-ほとんどの普通の英数字文字列を使用できます-例:
_for jnka127nsdn in $(cat input.txt); do whatis $jnka127nsdn ; done
_
cat
を解析せずに実行するには:
_while read -r i ; do whatis $i ; done < cmdlist.txt
_
このようなもの:
#! /bin/bash
in_file=$1
out_file=$2
while read command
do
whatis $command
done < $in_file >> $out_file
stderr
情報が利用できないコマンドがある場合は、whatis
をそのままにしておくことを選択しました。それを認識しておく必要があります(必要に応じて他の場所を見てください)。
次のコマンドで適切な結果を得ることができると思います。
_$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done | sed "s,: nothing appropriate.,,g" > cmdinfo.txt
_
実際には、
_$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done
_
コマンド、最初のコマンドの一部は、次のように出力を表示します。
_cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux tasks
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
tr (1) - translate or delete characters
_
whatis $(cat cmdlist.txt)
で実行できますが、出力には次の行が含まれます。
_.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
_
上記のsed
コマンドは、不要な出力行を削除します。
質問は今と変わります。 _cmdlist.txt
_のすべての行をwhatis
からリストできる場合、次のコマンドを簡単な方法として使用できます。
_whatis `cat 1.txt` 2>/dev/null > cmdinfo.txt
_
whatis
から完全にリストできる行だけが必要な場合は、次のコマンドを単純な方法として使用できます。
_whatis `cat 1.txt` > cmdinfo.txt
_
ただしさまざまな方法のいずれかを選択できます。