Làm thế nào để thực thi một lệnh lặp đi lặp lại với các đối số khác nhau?


11

Tôi đang dùng Ubuntu. Tôi đã sao chép một số đối số (được phân tách bằng dòng mới) và tôi có thể sử dụng xsel để in chúng ra như thế này

$ xsel
arg1
arg2
arg3
arg4
...

Bây giờ, tôi muốn sử dụng từng đối số này cho một lệnh khác và thực thi lệnh đó nhiều lần như có các đối số.

Vì vậy, tôi đã cố gắng

$ xsel | mycommand "constantArgument" $1

Tuy nhiên, điều này mycommandchỉ thực hiện cho đối số đầu tiên. Làm thế nào tôi có thể thực hiện nó cho mọi đối số?


Đã chỉnh sửa câu hỏi để phản ánh thực tế rằng có nhiều hơn một đối số cho mycommand.
Wes

Câu trả lời:


12

Bạn chỉ có thể sử dụng xargs

xsel | xargs -n1 echo mycommand 

-n1 có nghĩa là một đối số cho mycommand, nhưng nó chỉ là chạy khô, nó sẽ hiển thị những gì sẽ được chạy, để chạy nó loại bỏ echo

Đối với đối số không đổi

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}

Điều gì xảy ra nếu "mycommand" mong đợi nhiều hơn một đối số trong đó xsel chỉ chứa một đối số?
Wes

xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil

xsel | xargs -n2 echo mycommandhai arg mỗi lệnh
Rahul Patil

7
xsel | while read line; do mycommand "$line"; done

Hoặc một cái gì đó tương tự. Bạn cũng có thể sử dụng xargs, đây là một lệnh rất mạnh để thao tác các đối số dòng lệnh.


1

Đối với một chút tùy chỉnh:

printf "${CMD} %s ${ARG2}\n" `xsel` | sh -n

Bạn có thể xóa -noexecutecờ sau khi bạn thấy nó hoạt động như thế nào.

Nếu nó hiệu quả với bạn, bạn có thể bỏ shhoàn toàn và thay vào đó:

. <<HERE /dev/stdin
    $(printf "${CMD} %s ${ARG2}\n" `xsel`)
HERE

Hoặc nhanh hơn:

printf "${CMD} %s ${ARG2}\n" `xsel` | . /dev/stdin

Cả hai cách đều dễ dàng và sẽ làm được.

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.