Почему я не могу передать `pwd` в` open` на macOS?


12

Это специфично для macOS, но кажется слишком неуклюжим, чтобы участвовать в сообществе Ask Different .

В терминале я могу pwdскопировать результат, набрать openи вставить результат, и папка откроется в Finder, но

pwd | open

печатает справочную документацию для open. Почему не работает трубопровод, а вставка работает?


это будет работать, только если open ожидает, что вы введете имя каталога после того, как нажмете клавишу ввода.
— Ясен

9
Кроме того, это должно (не для пользователя Mac) работать: open .(для текущего каталога)
— UniversallyUniqueID

@BharadwajRaju open .работает и кажется самым простым. ти.
— Чак

Ответы:


20

У меня нет Mac, поэтому я не могу его протестировать, но решение должно быть примерно таким:

open "`pwd`"

Не все программы получают данные, stdinкоторые необходимы для работы канала.


1
Двойные кавычки не нужны.
— tbodt

4
@tbodt: попробуйте /var/tbodt's files.
— Джули Пеллетье

2
@tbodt: Как любая оболочка узнает, что пространство используется для разделения аргументов или части аргумента?
— Джули Пеллетье

2
@jamesdlin: жаловаться на bashпроект разработки, но не забывайте также разбивать все старые и самые новые оболочки, пока вы в нем. Конец связи!
— Джули Пеллетье

1
@JuliePelletier Я просто говорю, что вы утверждаете, что это невозможно для любой оболочки, но такие раковины, как рыба, ведут себя именно так, как описывает tbodt.
— Джеймсдлин

28

openУтилита на MacOS не читает со стандартного ввода, но берут свои аргументы из командной строки.

Чтобы открыть текущий рабочий каталог, вы должны сказать

$ open "$( pwd )"

или

$ open "$PWD"

или просто

$ open .

как указано в комментариях ниже.

С -fфлагом openможно сделать чтение из стандартного ввода, но только для открытия того, что он получает в текстовом редакторе по умолчанию.


1
Если оболочкой является (t) csh, вы бы хотели open $cwd:qвместо этого. И open (pwd)/ open $PWDесли этоfish
— Стефан Шазелас

1
@ StéphaneChazelas Я полагаю, что стандартная оболочка для Дарвина есть bash, но всегда приятно видеть решения и для других оболочек.
— Кусалананда

Для полноты картины , с rc, es, akangaоболочек: open `pwdилиopen `{pwd}
— Stéphane Chazelas

5
Или вы можете использовать синтаксис open .для текущего рабочего каталога или родительского каталога open .. или до двух каталогов open ../..и так далее.
— fd0

@ StéphaneChazelas: Почему $cwd:qпредпочтительнее "$cwd"использовать оболочку, связанную с csh?
— G-Man говорит: «Восстановите Монику»

9

Другие ответы абсолютно правильны. Если вам нужна простая запись , вы можете сделать так, как предложено @ fd0 , и просто использовать

open .

открыть текущий каталог. Текущий каталог имеет имя .(одна точка) в Unix, родительский каталог ..(две точки).


9
pwd | xargs open

xargs пихает свой стандартный ввод в аргументы своего первого аргумента.


2
Это только в том случае, если текущий путь к рабочей директории не содержит пробелов, символов новой строки, одинарных кавычек, двойных кавычек или обратной косой черты.
— Стефан Шазелас

pwd | xargs -d '\n' open
— Белкка

0

Вы можете использовать конвейер, -fчтобы открыть содержимое предыдущей команды в текстовом редакторе. Это относится только к текстовым редакторам. Для других приложений вам нужно использовать предложение в других вопросах.

Например:

ls | open -f

Это откроет ваш текстовый редактор по умолчанию с lsвыходным содержимым.

Вы также можете указать текстовый редактор для использования с помощью -a:

ls | open -a 'Atom' -f

Это откроет Atom с lsвыходным содержимым.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.