Thay thế cho xargs -d trong osx


22

Trong Linux, bạn có thể sử dụng xargs -d,để chạy nhanh hostnamelệnh chống lại bốn máy chủ khác nhau với các tên tuần tự như sau:

echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname

Có vẻ như lệnh OSX xargs không hỗ trợ tham số dấu phân cách. Bạn có thể đạt được kết quả tương tự với một định dạng khác echohoặc thông qua một số tiện ích dòng lệnh khác không?

Câu trả lời:


11

Làm thế nào về:

echo {1..4} | xargs -n1 -I{} ssh root@www{}.example.com hostname

Từ man xargs:

-n number
Set the maximum number of arguments taken from standard input for each invocation of utility.

1
Nếu các giá trị có thể chứa dấu cách, nguồn cấp dữ liệu hoặc tab, bạn có thể sử dụng một cái gì đó như printf 'a\0a' | xargs -0 -n1 echo.
Lri

44

Ngoài ra, bạn luôn có thể cài đặt GNU xargsthông qua Homebrewfindutilsgói GNU .

Cài đặt Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Làm theo chỉ dẫn. Sau đó cài đặt findutils:

brew install findutils

Điều này sẽ cung cấp cho bạn GNU xargsnhư gxargs, và bạn có thể sử dụng cú pháp bạn đang quen với việc từ GNU / Linux. Điều tương tự cũng xảy ra với các lệnh cơ bản khác được tìm thấy trong gói findutils như gfindhoặc glocatehoặc gupdatedb, có các bản sao BSD khác nhau trên OS X.


Cảm ơn bạn! Tôi đã làm điều này, sau đó thêm đường dẫn đến .zshrc(như được giải thích trong đầu ra cài đặt) để tôi không phải sử dụng gtiền tố.
vắng mặt

2

Nếu bạn muốn nó chạy song song, hãy sử dụng GNU Parallel:

parallel ssh root@www{}.example.com hostname ::: {1..4}

1

Bạn cũng có thể sử dụng trtrong OSX để chuyển đổi dấu phẩy sang các dòng mới và sử dụng xargs để liệt kê qua từng mục như sau:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
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.