2012-12-19 10 views
6

私は本[Linuxのデバイスドライバ]のこのスクリプト行を読んでいます。誰がそれが何をしているのかを説明するのを手伝ってもらえますか?コンテキストのようawkを使ったこのシェルスクリプト行の意味

major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices) 

#!/bin/sh 
module="scull" 
device="scull" 
mode="664" 

# invoke insmod with all arguments we got 
# and use a pathname, as newer modutils don't look in . by default 

/sbin/insmod ./$module.ko $* || exit 1 


# remove stale nodes 
rm -f /dev/${device}[0-3] 

major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices) 

mknod /dev/${device}0 c $major 0 
.... 
+1

あなたがそれを読んでどのような本は、それを燃やします。そのスクリプトの行の少なくとも半分には、それぞれに少なくとも1つのバグがあり、awkを呼び出す方法はちょっとばかげています。 –

+0

@EdMortonは親切に置き換えの本を提案します... –

+0

シェルの場合:シェル・クリス・ジョンソンのスクリプトレシピ。 awkの場合:Arnold Robbinsによる効果的なawkプログラミング –

答えて

2

私はこれも読んでいますが、その行は私のために働いていませんでした。私はそれを修正しなければならなかった

major=$(awk "\$2 == \"$module\" {print \$1}" /proc/devices) 

最初の部分​​はパターンです。これが満足された場合、すなわち第2列が「scull」に等しい場合、第1列を印刷するコマンドprint \$1が実行される。この値は、変数majorに格納されます。 $は、そのままawkに渡す必要があるため、エスケープする必要があります。

+0

いいえ!私はこれが正しい答えとして受け入れられたとは信じられません! @Guruの正解をご覧ください –

+0

@EdMortonこれはコードの説明が間違っているわけではありません。 – cmh

+1

@cmh - シアトルの霧の中で迷子になった男のことを思い出させて、建物に引っ張ってきて、彼がどこにいたのか聞いたところ、答えは「車の中」だった。その情報があれば、彼は自分の家に帰ることができると知っていたので、彼はちょうど完全に正しい完全に役に立たない答えを得たので、彼はMicrosoftのビルにいなければなりません。それを修正することなくバグのコードを解釈することは有用ではありませんIMHO。 –

1

/proc/devicesは、各モジュールのために現在設定されている文字やブロックデバイスを含んでいます。

あなたのコンテキストでいくつかの変数を展開し、平等に構文エラーを修正、コマンドは次のようになります。

awk '$2=="scull" {print $1}' /proc/devices 

第二のカラムの値がscullある場合、これは」意味、そして出力最初の列。

このコマンドはサブシェルで実行されます($(...))。出力は変数$majorに割り当てられます。

目的の説明は、in the bookある:

動的番号を割り当てられたモジュールをロードするためのスクリプトは、従って、順に/proc/devicesから情報を取得するようawkなどのツールを使用して書くことができます/devにファイルを作成します。

the distributed examplesには、scull_loadの行がVivekの修正と一致しています。

+0

ありがとうcbuckley、非常に徹底的な答え。 – user1559625

7

これは次のようになり書くためのより良い方法:

major=$(awk -v mod=$module '$2==mod{print $1}' /proc/devices) 
+0

+1私は似たようなものを書いていました。これはawkにシェル変数を渡す正しい方法です。 – Steve

+0

@グル、知っておいてよかったです。 – user1559625

+0

+1ほぼ正しいです。あなたのシェル変数を引用するだけです: 'mod =" $ module "'。 –

関連する問題