Обычно xargs
используется для случаев, когда вы передадите (с символом |
) что-то из одной команды в другую ( Command1 | Command2
), но выходные данные из первой команды не будут правильно получены в качестве входных данных для второй команды.
Обычно это происходит, когда вторая команда не обрабатывает ввод данных через стандартный ввод (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
.