web-dev-qa-db-ja.com

Udevルールがパラメーターの受け渡しに失敗する

GentooのLinux初心者はこちら。 Pythonスクリプトを実行し、usbデバイス(特にusbモデム)が挿入されるたびにいくつかの情報を渡すudevルールを作成しようとしています。

SUBSYSTEM == "usb", ACTION == "add", $ATTRS{vendor} = "?*", RUN += "/home/.../notify.py %k '$attr{vendor}'"

出発点として。

現在、notify.pyはデバッグを支援しようとする実行可能ファイルであり、次のようになります。

#!/usr/bin/python
import sys
log = open("log.txt", 'a')
for a in sys.argv:
    log.write(a + "\n")
fi.close()

「$ attr {vendor}」を渡す方法がわかりません。現在、%k(デバイスのカーネル)のみが渡され、追加したい他の文字列引数とともに出力されます。私はインターネットのいたるところにいて、「$ attr {vendor}」(何も出力しない)、「$ attrs {vendor}」(「s {vendor}」を出力する)、「%s {vendor}」を試しました。 (何も出力しません)。変数がまだ定義されていない場合などに備えて、このルールの優先度を変更してみました。私は他のルールファイルを見ました、そしてそれらのどれも私がしていることをまったくしません、しかしそれらはなんとか「$ attr {[何か]}」を使うことができます。

まだ紛らわしいのは、私が次のようなものを書いた場合です

GOTO+="$attr{vendor}"

viはそれを文字列として強調表示しますが、

RUN+="$attr{vendor}"

そしてviはすべてを異なって強調します。このバグは、RUNの動作方法、または「$ attr」の不適切な使用法に関係しているように感じますが、完全に失われています。

これらの投稿 私がやろうとしていることと同じようなことをしているようです。この問題に関するヘルプや入力をいただければ幸いです。

3
Ivoirians

それが誰かを助ける場合に備えて、私は問題を解決するのに役立つ2つのステップを見つけました。

1つ目は、ルールが属性情報を取得する親デバイスを選択していることを確認することでした。そこで、

ATTRS{bDeviceClass} == "02"

ルールを目的のネットワークデバイスにリンクさせます。

最初のステップの後で不要だったかもしれない2番目のステップは、環境変数を設定し、それを次のように呼び出すことでした。

ENV{var} = ATTRS{bDeviceClass}, RUN+="/home/.../notify.py '$env{var}'"

これにより、変数が正常に渡されました。結局、$ attrと%sはまだ機能していないように見えました。私はこれにずっと立ち往生していたので、今は物事をいじる動機がありません。

2
Ivoirians