Làm thế nào để truyền đầu ra lệnh dưới dạng một số đối số cho một lệnh khác


12

Tôi có một lệnh tạo ra một đầu ra như thế này:

$. / lệnh1
word1 word2 word3

Tôi muốn chuyển ba từ này làm đối số cho một lệnh khác như thế này:

$ lệnh2 word1 word2 word3

Làm cách nào để chuyển đầu ra lệnh1 dưới dạng ba đối số khác nhau $ 1 $ 2 $ 3 sang lệnh2?

Câu trả lời:


8

Bạn có thể sử dụng xargs, với -tcờ xargssẽ dài dòng và in các lệnh mà nó thực thi:

./command1 | xargs -t -n1 command2

-n1xác định các đối số tối đa được truyền cho mỗi cuộc gọi của command2. Điều này sẽ thực thi:

command2 word1
command2 word2
command2 word3

Nếu bạn muốn tất cả như là đối số của một cuộc gọi command2sử dụng đó:

./command1 | xargs -t command2

Điều đó gọi lệnh2 với 3 đối số:

command2 word1 word2 word3

Nếu đầu ra của lệnh1 dài hơn ARG_MAXthì sao? Tôi có một kịch bản trong đó tôi chuyển nội dung của tệp đến một hàm.
0xc0de

4

Bạn muốn 'thay thế lệnh', nghĩa là: đầu ra nhúng của một lệnh trong anouther

command2 $(command1)

Theo truyền thống, điều này cũng có thể được thực hiện như:

command2 `command1`

nhưng cách sử dụng này thường không được khuyến khích, vì bạn không thể lồng chúng.

Ví dụ:

test.sh:
#!/bin/bash
echo a b c

test2.sh

#!/bin/bash
echo $2

SỬ DỤNG:

./test2.sh $(./test.sh)
b

Nếu tôi làm điều đó, nó sẽ truyền đầu ra lệnh1 dưới dạng một đối số duy nhất, không giống như ba đối số khác nhau: $ command2 $ (cat output_from_command1)
Addy

À đúng rồi, một giây ... btw mèo không cần thiết ở cái mà bạn đặt ở đó.
Sirex

Làm việc cho tôi. Nếu lệnh2 của tôi vang lên $ 2 (i, e: đối số thứ hai), tôi nhận được "word2" như mong đợi.
Sirex

0

Tôi đoán điều này sẽ giúp bạn

lệnh1 | lệnh xargs2

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.