Теперь, когда я знаю, где он находится, я хочу что-то сделать с этим файлом, скажем, отредактировать его. Вместо того, чтобы копировать / вставлять путь за моей командой, можно ли использовать путь, возвращаемый find раньше? Точно так же, как можно получить доступ к последнему аргументу, который вы ввели с помощью !$ или вы в последний раз командовали с !!. Я читал, что это было возможно с $?, но это только возвращает мне ошибку: 0: command not found
$?> содержит код выхода последней команды (0 = успех, 0 = код ошибки)
Вы можете использовать выходные данные find с -exec флаг, вот такой:
find -name '*.wsdl' -exec emacs {} \;
То {} заменяется именем файла, найденным с помощью find. Это приведет к выполнению команды для каждого найденного файла. Если вы хотите выполнить команду со всеми найденными файлами в качестве аргументов, используйте + в конце, как это:
find -name '*.wsdl' -exec emacs {} +
Это открыло бы один экземпляр emacs со всеми найденными .wsdl-файлами, открытыми в нем.
Более общим решением является сохранение выходных данных в переменной:
result=$(find -name '*.wsdl')emacs $result
Это работает со всеми командами, а не только с поиском. Хотя вы также можете использовать xargs:
Вот быстрый хак, который должен делать то, что вы хотите, с минимальными нажатиями клавиш, если вы не возражаете, что последняя команда выполняется дважды.
Используйте обратный отсчет, аля:
`!!`
напр.
$ найти . - имя HardToFind.txtsome/crazy/path/to/HardToFind.txt $ vim `!!`
* редактировать: я вижу, что приведенный выше связанный вопрос "возможно, обманутый" также содержит этот ответ. все еще имеет непосредственное отношение к этому вопросу, поэтому оставляю его, но извините за обман.
Чтобы уточнить, “возвращаемое значение” всегда является числом. Обычно 0 означает успех, а ненулевое значение означает какую-то неудачу. Строка (или текст), которую выдает команда, называется ее “выводом”, а не “возвращаемым значением”.