Взагалі xargs
використовується для випадків, коли ви передаваєте (із символом |
) щось від однієї команди до іншої ( Command1 | Command2
), але вихід з першої команди неправильно приймається як вхід для другої команди.
Зазвичай це відбувається, коли друга команда неправильно обробляє введення даних через Standard In (stdin) (наприклад: Кілька рядків як вхід, спосіб встановлення рядків, символи, що використовуються як вхід, кілька параметрів як вхід, тип даних, отриманий як введення тощо). Щоб дати короткий приклад, протестуйте наступне:
Приклад 1:
ls | echo
- Це нічого не зробить, оскільки echo
не знає, як обробляти вхід, який він отримує. Тепер у цьому випадку, якщо ми використовуємо xargs
його, буде оброблятися вхід таким чином, щоб можна було правильно обробити echo
(наприклад: як єдиний рядок інформації)
ls | xargs echo
- Це виведе всю інформацію з ls
одного рядка
Приклад 2:
Скажімо, у мене є кілька файлів goLang всередині папки під назвою go. Я б шукав їх приблизно так:
find go -name *.go -type f | echo
- Але якби символ труби там і echo
в кінці, він би не працював.
find go -name *.go -type f | xargs echo
- Тут би це працювало завдяки, xargs
але якби я хотів, щоб кожна відповідь find
команди була в одному рядку, я би зробив наступне:
find go -name *.go -type f | xargs -0 echo
- У цьому випадку такий же вихід з find
показав би показник echo
.
Такі команди, як cp, echo, rm, less
і інші, яким потрібен кращий спосіб обробити вхід, отримують перевагу при використанні xargs
.