Dlaczego nie mogę potokować `pwd`, by` open` na macOS?

12

Jest to specyficzne dla systemu macOS, ale wydaje się zbyt unikatowe, aby przejść do społeczności Ask Different .

W Terminalu mogę pwdskopiować wynik, a następnie wpisać openi wkleić wynik, a folder otworzy się w Finderze, ale

pwd | open

drukuje dokumentację pomocy dla open. Dlaczego pipowanie nie działa, a wklejanie?

Głaskanie pod brodę
źródło
zadziała to tylko wtedy, gdy open spodziewa się wpisać nazwę katalogu po naciśnięciu enter.
Jasen
9
Powinno to również działać (nie dla użytkowników komputerów Mac): open .(dla bieżącego katalogu)
UniversallyUniqueID
@BharadwajRaju open .działa i wydaje się najłatwiejszy. ty.
Chuck,

Odpowiedzi:

20

Nie mam komputera Mac, więc nie mogę go przetestować, ale rozwiązaniem powinno być coś takiego:

open "`pwd`"

Nie wszystkie programy pobierają dane wejściowe, stdinktóre byłyby konieczne do działania potoku.

Julie Pelletier
źródło
1
Podwójne cytaty są niepotrzebne.
tbodt
4
@tbodt: Wypróbuj /var/tbodt's files.
Julie Pelletier,
2
@tbodt: Skąd jakakolwiek powłoka wiedziałaby, gdyby wykorzystana przestrzeń służyła do oddzielania argumentów lub ich części?
Julie Pelletier
2
@jamesdlin: Idź narzekać na bashprojekt programistyczny, ale nie zapomnij również uderzyć wszystkich starszych i większości nowszych powłok, gdy jesteś przy tym. W kółko!
Julie Pelletier,
1
@JuliePelletier Po prostu mówię, że twierdzisz, że jest to niemożliwe dla żadnej skorupy, ale muszle takie jak ryby zachowują się dokładnie tak, jak opisuje tbodt.
jamesdlin
28

openNarzędziowy na MacOS nie czyta ze standardowego wejścia, ale ma swoje argumenty z linii poleceń.

Aby otworzyć bieżący katalog roboczy, musisz powiedzieć

$ open "$( pwd )"

lub

$ open "$PWD"

lub po prostu

$ open .

jak wskazano w komentarzach poniżej.

Za pomocą -fflagi openmożna odczytać ze standardowego wejścia, ale tylko w celu otwarcia wszystkiego, co otrzyma w domyślnym edytorze tekstu.

Kusalananda
źródło
1
Jeśli powłoką jest (t) csh, powinieneś open $cwd:qzamiast tego. I open (pwd)/ open $PWDjeśli jestfish
Stéphane Chazelas,
1
@ StéphaneChazelas Wierzę, że domyślną powłoką Darwina jest bash, ale zawsze dobrze jest znaleźć rozwiązania dla innych powłok.
Kusalananda
Dla kompletności, z rc, es, akangamuszle: open `pwdalboopen `{pwd}
Stéphane Chazelas
5
Lub możesz użyć składni - open .dla bieżącego katalogu roboczego lub katalogu nadrzędnego open .. lub do dwóch katalogów open ../..i tak dalej.
fd0
@ StéphaneChazelas: Dlaczego miałoby $cwd:qbyć lepiej "$cwd"w powłoce CSS?
G-Man mówi „Przywróć Monikę”
9

Pozostałe odpowiedzi są całkowicie poprawne. Jeśli chcesz mieć łatwy skrót , możesz zrobić zgodnie z propozycją @ fd0 i po prostu użyć

open .

aby otworzyć bieżący katalog. Bieżący katalog nosi nazwę .(pojedyncza kropka) w Uniksie, katalog nadrzędny ..(dwie kropki).

serv-inc
źródło
9
pwd | xargs open

xargs przekazuje standardowe dane wejściowe do argumentów pierwszego argumentu.

dbanet
źródło
2
Dzieje się tak tylko wtedy, gdy bieżąca ścieżka do katalogu roboczego nie zawiera pustych znaków, nowego wiersza, pojedynczych cudzysłowów lub podwójnych cudzysłowów lub odwrotnych ukośników.
Stéphane Chazelas
pwd | xargs -d '\n' open
belkka
0

Za pomocą potoku -fmożna otworzyć zawartość poprzedniego polecenia w edytorze tekstu. Dotyczy to tylko edytorów tekstu. W przypadku innych aplikacji musisz skorzystać z sugestii zawartej w innych pytaniach.

Na przykład:

ls | open -f

Spowoduje to otwarcie domyślnego edytora tekstu z lszawartością wyjściową.

Możesz także określić edytor tekstu, który ma być używany, używając -a:

ls | open -a 'Atom' -f

Otworzy to Atom z lszawartością wyjściową.

Pau Chorro
źródło