Ответ 1
В свете ретроспективного анализа есть 2 разных ответа:
A: Чтобы ответить на вопрос OP, заданный, с целью понимания труб и потоков ввода-вывода:
echo . | xargs open
# Equivalent solution, using the special "$PWD" shell variable.
printf '%s\0' "$PWD" | xargs -0 open
- самый надежный способ передать текущий путь каталога в CLI open
через канал, чтобы он открыл этот каталог в графическом интерфейсе графического интерфейса файловой системы OSX, Finder
.
Обратите внимание, что pwd | xargs open
НЕ является надежным, потому что он терпит неудачу, если текущий путь к каталогу имеет встроенные пробелы - см. ниже.
-
open
требует ввода, предоставляемого с помощью аргументов командной строки чем через входной потокstdin
, как здесь (через трубу,|
). - Таким образом, для перевода ввода stdin в аргументы требуется стандартная утилита
xargs
. -
xargs
принимает вход stdin - исходящий из трубы в этом случае - и вызывает команду, указанную в качестве аргумента (open
, в данном случае), с входным сигналом stdin в качестве аргументов команды. -
xargs
по умолчанию пробегает пробел:- С
.
в качестве входа не происходит никакого расщепления (или интерпретации оболочки), поэтому оно может бытьecho
ed доxargs
. - В отличие от этого, специальная переменная оболочки
$PWD
, которая всегда содержит текущий каталог. полный путь, может содержать встроенные пробелы, поэтому необходимы дополнительные шаги, чтобы обеспечить его передачу вopen
как один аргумент:-
printf '%s\0' "$PWD"
печатает текущий каталог. полный путь завершен с помощью NUL-байта (0x0
). - В дополнение,
xargs -0
разбивает вход stdin на токены на NUL - в результате получается один токен в этом случае, сохраняя значение единственной строки ввода - содержащее$PWD
- как есть. Это безопасно, потому что NUL не является законным байтом в именах файлов.- Примечание:
-0
является нестандартным расширением стандарта стандарта POSIX дляxargs
, но он реализован как в BSDxargs
( как используется в OSX) и GNUxargs
(как используется в Linux). Остальной POSIX-совместимый [1] лучше всего использовать линейную токенизацию с опцией-I
следующим образом:printf '%s' "$PWD" | xargs -I % open %
- Примечание:
-
- С
Таким образом, в действительности вышеупомянутые решения эквивалентны (что в конечном итоге выполняется xargs
- см. следующий раздел для объяснения):
open .
# Equivalent solution.
open "$PWD"
Для параметра [1] xarg
-I
требуется система POSIX, которая также XSI -compliant. Если кто-нибудь может объяснить мне, что это означает в практическом плане, я был бы благодарен.
B: Чтобы обеспечить наилучший ответ без ограничений на используемые методы:
open .
open
ожидает аргументы, а не stdin
input, а .
кратко и наиболее эффективно представляет текущий каталог, заставляя open
отображать содержимое текущей папки в Finder
.
Эквивалентное, но более подробное решение - передать специальную переменную оболочки $PWD
, которая всегда содержит полный путь к текущему каталогу (ссылка на двойные кавычки, чтобы защитить его от расширения оболочки:
open "$PWD"