Я пытаюсь следующее
echo 5 | echo
но ничего не получите. Что случилось?
Такие команды, как grep
и awk
могут принимать стандартный ввод (STDIN) в качестве параметра или аргумента с использованием канала. Однако другие, такие как cp
и echo
игнорируют стандартный поток ввода и полагаются исключительно на аргументы, найденные после команды.
Используя команду xargs
вы можете создавать и выполнять командные строки из стандартного ввода, например, в вашем случае:
echo 5 | xargs echo
Не существует точного правила, чтобы узнать, принимает ли команда стандартный ввод, однако вы можете иметь небольшое представление, используя эти два правила:
Если команда используется для какой-либо манипуляции с содержимым файла (grep
, sed
, awk
и т.д.), То она обычно может принимать входные данные из STDIN.
Если команда используется для управления самим файлом (например, mv
, rm
, cp
) или процессом (например, kill
, lsof
) или для возврата информации о чем-либо (например, top
, find
, ps
), то это не так.