Почему я не могу передать `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.