Я не вполне понимаю, как каналы работают в ударе.
Я знаю, что это берет вывод от одной команды как вход в другой команде.
Какой вывод, я могу добраться, потому что это - то, что команда распечатывает на экран.
Но то, как я знаю то, что вводит команду, возьмет?
Вот пример, я думал, будет работать:
which gem | rm
К сожалению, это не сделало.
Который распечатывает драгоценный камень /usr/bin/gem
таким образом, это должно быть выходным правом?
Я думал, что это было дано комнате так это woud быть rm /usr/bin/gem
но я был неправ.
Таким образом, мой вопрос, как я знаю то, что вводит команду, берет?
"Вход" и "параметры командной строки" являются разными вещами.
rm
удаляет файлы, обеспеченные как аргументы.
Канал перенаправляет вывод левой команды к входу правой команды. Это не влияет на параметры командной строки программы справа.
Чтобы сделать, что Вы пытаетесь сделать, попытайтесь использовать xargs
преобразовать стандартный вход в параметры командной строки для того, чтобы выполнить программу. Это - его задание.
which gem | xargs rm
, например, удалит gem
в Вашем ПУТИ.
rm
не берет вход, он берет аргументы. Они отличаются. Аргументами являются переключатели и имена файлов и т.д, что Вы даете программе на командной строке для влияния на ее поведение. Вход является данными, что программа продолжает работать. Например, grep
берет и вход и аргументы:
grep "foo" file.txt
Там существует два аргумента "foo"
и file.txt
. Вход является содержанием file.txt
, не строка file.txt
самостоятельно. Так как grep берет вход, можно использовать его с каналами:
cat file.txt | grep "foo"
производит тот же вывод, так как кошка берет file.txt
как аргумент и создание содержания file.txt
как произведено. Тот вывод затем передается по каналу в к grep, давая тот же эффект, как имеющий grep открывают сам файл, как в первом примере.
Если Вы хотите использовать вывод одной программы как аргумент другому, Вы используете обратные галочки:
rm `which gem`
или этот альтернативный (определенный для удара) синтаксис:
rm $(which gem)
Править: или xargs
поскольку другая отвечающая сторона указывает. Много способов освежевать кошку с командной строкой.
Проверьте man
страницы команд Вы интересуетесь. Эти программы укажут, что они читают из stdin
(попробуйте man grep
для популярной команды, которая читает stdin).
Они все опасны для выполненного, если у Вас есть каталог в Вашем ПУТИ, который содержит пространство или если название команды содержит пространство:
rm `which gem` # Dangerous
rm $(which gem) # Dangerous
which gem | xargs rm # Dangerous
www.gnu.org/software/parallel/ http:// Параллели GNU не имеет той проблемы, таким образом, это будет работать, даже если у Вас будет каталог в Вашем ПУТИ, который содержит пространство или если название команды содержит пространство:
which gem | parallel rm
parallel -a <(which bass) rm
Посмотрите вводное видео для Параллели GNU: http://www.youtube.com/watch?v=OpaiGYxkSuQ