Передать вывод одной команды как ввод другой

612
techfun

Я искал один файл "portmap" внутри корневого каталога следующим образом:

find -name "portmap" 

Это дает местоположение файла

.init/...somepath./portmap 

Теперь я хочу изменить свой текущий каталог на местоположение файла portmap и распечатать текущий рабочий каталог.

Так что я подумываю о конвейере вышеупомянутого места на CD. Но как я могу сделать это с помощью одной команды?

Пожалуйста помоги

0

2 ответа на вопрос

1
DopeGhoti

Presuming that find finds one and only one match for the search pattern, you can use

cd "$( dirname "$( find -name "portmap" )" )" 

If at any time you want to do to the directory enumerated in the output of the previous command, you can use

cd "$( dirname "$(!!)" )" 
Здравствуйте, спасибо за ответ. Но это дает мне основанную на ошибке команду irir not found. Я просто копирую вставленную выше строчку. Работает ли это в командной строке mint? Спасибо techfun 10 лет назад 0
@ techfun Я думаю, что DopeGhoti означало «dirname». Кроме того, вы должны заключить в кавычки подстановки, чтобы пути с пробелами не нарушали команду. slhck 10 лет назад 1
Да, спасибо @slhck. По какой-то причине у меня в голове каждый раз пересекаются провода `basename` и` dirname`. DopeGhoti 10 лет назад 0
Рад, что помог. DopeGhoti 10 лет назад 0
-1
joe

Команда xargs идеально подходит для этого, но команда cd в оболочке не очень хорошо с ней работает. Поэтому я бы использовал обратные галочки:

cd `find . -type d -name "portmap"` 
ОП хочет перейти в каталог, где находится файл `portmap`. Ваша команда не достигает этого. Кроме того, двойные кавычки должны использоваться при замене путей к файлам. slhck 10 лет назад 0

Похожие вопросы