Bạn chờ mọi thứ, nhưng đặc biệt là USBmodem.


1

Tôi đang viết firmware cho các thiết bị khác nhau giao tiếp với nhau và cả hai đều được kết nối với máy mac của tôi bằng USB. tôi đang dùng zsh. Đầu tiên là luôn luôn trên /dev/tty.usbmodem1 và đối với một số mac-resons ngu ngốc, mọi thiết bị tiếp theo sẽ nằm trên số modem ngẫu nhiên. Hãy nói rằng thứ hai là trên /dev/tty.usbmodem11.
Tôi đang sử dụng lệnh sau để tải lên phần sụn của mình:

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

Nếu nó không tìm thấy bất kỳ thiết bị nào trong usbmodem, nó sẽ đợi thiết bị đầu tiên xuất hiện.

Điều tôi muốn là biểu hiện thường xuyên cho việc này --port= trả lại bất cứ thứ gì nhưng /dev/tty.usbmodem1

để có thể tải lên chương trình cơ sở trên thiết bị thứ hai trong khi vẫn kết nối với thiết bị đầu tiên (luôn luôn bật usbmodem1 ).
Tôi đã cố gắng:

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

Nhưng nó không hoạt động nếu tôi cắm thiết bị trong khi tập lệnh này đang chờ nó. (tập lệnh có thể đợi thiết bị sử dụng lệnh đầu tiên, như tôi đã viết ở trên).


1
Là tham số cho --port được đặt trong dấu ngoặc đơn, nó được chuyển không thay đổi thành uploader.py, vì vậy vỏ không thể giúp ở đây. Những gì bạn có thể thử là, nếu tools/uploader.py --port=/dev/tty.usbmodem2 --port=/dev/tty.usbmodem3 Images/image.file đang làm việc. Nếu vậy, có nhiều cách zsh có thể giúp đỡ.
mpy

Vâng, điều này đang làm việc. Bạn có thể cho một ví dụ về việc thực hiện danh sách này với zsh? Tôi thích kịch bản một dòng hơn vài dòng. :)
arbulgazar

Đã kết thúc sửa đổi tập lệnh python để nó chấp nhận tham số --except ngay bây giờ.
arbulgazar

Bạn có thể cho một ví dụ về việc thực hiện danh sách này với zsh? Tất nhiên, tôi chỉ muốn biết rằng uploader.py có thể xử lý nhiều --port thông số.
mpy

Câu trả lời:


2

Trong bình luận, bạn xác nhận rằng một dòng lệnh như

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

đang làm việc. Để viết một câu trả lời tổng quát hơn, tôi làm nó tan chảy

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

mà mọi người có thể kiểm tra với bản sao & amp; dán. Vì vậy, tôi có hai cách tiếp cận zsh'ish trong tâm trí.

  1. Sử dụng sơ đồ xây dựng fileN Ở đâu N là một số bắt đầu từ 2 cho đến khi nói 5. Sau đó, bạn có thể sử dụng mở rộng dấu ngoặc:

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

    Điều này không quan tâm nếu fileN thực sự là một tập tin hoặc nếu nó tồn tại. Nó chỉ là một văn bản.

  2. Sử dụng vòng loại toàn cầu P, mà trả trước một chuỗi (được phân định, ví dụ: : ) cho kết quả của một mẫu hình cầu ( file* ):

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

    I E. kết quả phụ thuộc vào những gì tập tin tồn tại, trong ví dụ của tôi file1 đến file5file7.

    Nhưng chờ đã, bạn muốn loại trừ file1, vì vậy sửa đổi mô hình toàn cầu thành file(^1) viết tắt của file(*^1) và nên được đọc là file* nhưng không (^) file1:

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

    Hoặc dùng file<2->, phù hợp với file2 trở đi

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

    Xin lưu ý rằng vòng loại toàn cầu này chèn một khoảng trắng sau tiền tố. Đây có thể là một vấn đề, nhưng tôi cũng muốn đưa vào phương pháp này, vì nó thường rất tiện dụng.


Câu trả lời hoàn hảo. Tôi sẽ để trình tải lên được chỉnh sửa python của tôi như một giải pháp làm việc, nhưng câu trả lời này là tuyệt vời cho kiến ​​thức chung về zsh! Cảm ơn ngài.
arbulgazar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.