「特定のusbmodem以外のすべてを待つ」zsh正規表現


1

私は互いに通信するさまざまなデバイス用のファームウェアを書いており、それらは両方ともUSBで私のMacに接続されています。を使用していzshます。最初のものは常にオン/dev/tty.usbmodem1で、いくつかの馬鹿げたmac-resonsでは、次のデバイスはすべてランダムなモデム番号になります。2番目のものがオンになって/dev/tty.usbmodem11いるとしましょう。
次のコマンドを使用してファームウェアをアップロードしています。

tools/uploader.py --port='/dev/tty.usbmodem*' Images/image.file 

usbmodemの下にデバイスが見つからない場合、最初のデバイスが表示されるまで待機します。

私が欲しいのは、このための正規表現を作ることである--port=何かを返すことが、 /dev/tty.usbmodem1

最初のデバイス(常にオンusbmodem1)に接続したまま、2番目のデバイスにファームウェアをアップロードできるようにします。
やってみた:

tools/uploader.py --port='/dev/tty.usbmodem* | egrep \"usbmodem1$\" -v' Images/image.file

しかし、このスクリプトが待機している間にデバイスを接続すると動作しません。(上で書いたように、スクリプトは最初のコマンドを使用してデバイスを待つことができます)。


1
のパラメーター--portは単一引用符で囲まれているuploader.pyため、変更されずにに渡されるため、シェルはここでは役に立ちません。あなたが試すことができるのは、tools/uploader.py --port=/dev/tty.usbmodem2 --port=/dev/tty.usbmodem3 Images/image.file働いている場合です。その場合、zshが役立つ複数の方法があります。
mpy

はい、これは機能しています。このリストをzshで実装する例を挙げていただけますか?私は、数行のスクリプトよりも1行のスクリプトを好むでしょう。:)
アルブルガザル

pythonスクリプトを変更して、-exceptパラメーターを受け入れるようになりました。
アルブルガザール

このリストをzshで実装する例を挙げていただけますか?もちろん、uploader.pyが複数の--portパラメーターを処理できることを知りたいだけです。
mpy

回答:


2

コメントでは、コマンドラインが

tools/uploader.py --port=/dev/tty.usbmodem2 --port=/dev/tty.usbmodem3 Images/image.file

仕事中。より一般的な答えを書くために私はそれを溶かす

echo foo --bar=file2 --bar=file3 ...

誰でもコピー&ペーストでテストできます。だから、私は2つのzsh'ishアプローチを念頭に置いています。

  1. 構築スキーム使用5.次にあなたがブレース展開を使用することができると言うことができますまで、数が2から開始されました:fileNN

    $ echo foo --bar=file{2..6}
    foo --bar=file2 --bar=file3 --bar=file4 --bar=file5 --bar=file6
    

    fileN実際にファイルであるか、存在するかは関係ありません。それは単なるテキストです。

  2. glob修飾子を使用しますP。これ:、グロビングパターン(file*)の結果のに文字列(などで区切られます)を付加します。

    $ echo foo file*(P:--bar:)
    foo --bar file1 --bar file2 --bar file3 --bar file4 --bar file5 --bar file7
    

    I. e。結果は、どのファイルが存在するかによって異なります。私の例ではfile1file5およびfile7

    しかし、あなたは除外したい、待ってfile1、これにグロブパターン変更file(^1)のために短いfile(*^1)として読まれるべきでfile* はありません(^)をfile1

    $ echo foo file(^1)(P:--bar:)
    foo --bar file2 --bar file3 --bar file4 --bar file5 --bar file7
    

    またはfile<2->file2以降に一致するを使用します。

    $ echo foo file<2->(P:--bar:)
    foo --bar file2 --bar file3 --bar file4 --bar file5 --bar file7
    

    このglob修飾子はプレフィックスの後にスペースを挿入することに注意してください。これは問題になるかもしれませんが、通常は非常に便利なので、このアプローチも含めたいと思いました。


完璧な答え。pythonで編集したアップローダーは有効なソリューションのままにしておきますが、この答えはzshの一般的な知識にとっては素晴らしいことです!ありがとうございます。
アルブルガザール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.