Mengapa saya tidak bisa mem-pipe `pwd` ke` open` di macOS?

12

Ini khusus macOS, tetapi tampaknya terlalu aneh untuk masuk ke komunitas Ask Different .

Di Terminal, saya bisa pwd, salin hasilnya, dan ketik opendan tempel hasilnya dan folder akan terbuka di Finder, tetapi

pwd | open

mencetak dokumentasi bantuan untuk open. Mengapa perpipaan tidak berfungsi tetapi menempel tidak?

Membuang
sumber
itu hanya akan berfungsi jika terbuka mengharapkan Anda mengetik nama direktori setelah Anda menekan enter.
Jasen
9
Juga, ini seharusnya (bukan pengguna mac) bekerja: open .(untuk direktori saat ini)
UniversallyUniqueID
@BharadwajRaju open .berfungsi dan tampaknya paling mudah. ty.
Chuck

Jawaban:

19

Saya tidak punya Mac jadi saya tidak bisa mengujinya, tetapi solusinya harus seperti:

open "`pwd`"

Tidak semua program mengambil input stdinyang darinya pipa perlu bekerja.

Julie Pelletier
sumber
1
Kutipan ganda tidak perlu.
tbodt
3
@tbodt: Cobalah /var/tbodt's files.
Julie Pelletier
Saya akan berpikir bash akan memperlakukan itu sebagai satu argumen ... Inilah sebabnya saya tidak menggunakan bash.
tbodt
2
@tbodt: Bagaimana shell bisa tahu jika ruang yang digunakan adalah untuk memisahkan argumen atau bagian dari argumen?
Julie Pelletier
2
@jamesdlin: Pergilah mengeluh tentang bashproyek pengembangan, tetapi jangan lupa untuk pergi juga bash semua shell yang lebih tua dan sebagian besar shell yang lebih baru saat Anda melakukannya. Berulang-ulang!
Julie Pelletier
27

The openutilitas di Mac tidak membaca dari input standar, tetapi mengambil argumen dari baris perintah.

Untuk membuka direktori kerja saat ini, Anda harus mengatakan

$ open "$( pwd )"

atau

$ open "$PWD"

atau sederhana

$ open .

seperti yang ditunjukkan dalam komentar di bawah ini.

Dengan -fflag, opendapat dibuat untuk membaca dari input standar, tetapi hanya untuk membuka apa pun yang diterimanya di editor teks default.

Kusalananda
sumber
1
Jika shellnya adalah (t) csh, Anda akan menginginkannya open $cwd:q. Dan open (pwd)/ open $PWDjika itufish
Stéphane Chazelas
1
@ StéphaneChazelas Saya percaya shell default pada Darwin adalah bash, tetapi selalu baik untuk melihat solusi untuk shell lain juga.
Kusalananda
Untuk kelengkapan, dengan rc, es, akangakerang: open `pwdatauopen `{pwd}
Stéphane Chazelas
5
Atau Anda dapat menggunakan sintaks- open .untuk direktori kerja saat ini atau direktori induk open .. atau naik dua direktori open ../..dan sebagainya.
fd0
@ StéphaneChazelas: Mengapa $cwd:qlebih disukai "$cwd"di shell yang berhubungan dengan csh?
G-Man Mengatakan 'Reinstate Monica'
9

Jawaban lain sepenuhnya benar. Jika Anda menginginkan tulisan cepat yang mudah , Anda dapat melakukan seperti yang disarankan @ fd0 , dan gunakan saja

open .

untuk membuka direktori saat ini. Direktori saat ini bernama .(satu titik) di Unix, direktori induk ..(dua titik).

serv-inc
sumber
9
pwd | xargs open

xargs mendorong input standarnya ke argumen argumen pertama.

dbanet
sumber
2
Itu hanya jika jalur direktori kerja saat ini tidak mengandung baris kosong atau baris baru atau tunggal atau tanda kutip ganda atau garis miring terbalik.
Stéphane Chazelas
pwd | xargs -d '\n' open
belkka
0

Anda dapat menggunakan pipa dengan -funtuk membuka konten dari perintah sebelumnya di Editor Teks. Ini hanya berlaku untuk editor teks. Untuk aplikasi lain Anda harus menggunakan saran di pertanyaan lain.

Sebagai contoh:

ls | open -f

Ini akan membuka editor teks default Anda dengan lskonten output.

Anda juga dapat menentukan editor teks yang akan digunakan menggunakan -a:

ls | open -a 'Atom' -f

Ini akan membuka Atom dengan lskonten output.

Pau Chorro
sumber