¿Por qué no puedo canalizar `pwd` para` abrir` en macOS?

12

Esto es específico de macOS, pero parece demasiado complicado para entrar en la comunidad Ask Different .

En Terminal, puedo pwdcopiar el resultado, escribir openy pegar el resultado y la carpeta se abrirá en el Finder, pero

pwd | open

imprime la documentación de ayuda para open. ¿Por qué no funciona la tubería, pero sí pegar?

Arrojar
fuente
eso solo funcionará si abrir espera que escriba el nombre del directorio después de presionar enter.
Jasen
99
Además, esto debería funcionar (no un usuario de Mac): open .(para el directorio actual)
UniversallyUniqueID
@BharadwajRaju open .funciona y parece ser el más fácil. ty.
Chuck

Respuestas:

20

No tengo una Mac, así que no puedo probarla, pero la solución debería ser algo como:

open "`pwd`"

No todos los programas toman su aporte de lo stdinque sería necesario para que la tubería funcione.

Julie Pelletier
fuente
1
Las comillas dobles son innecesarias.
tbodt
44
@tbodt: Pruébalo /var/tbodt's files.
Julie Pelletier el
2
@tbodt: ¿Cómo sabría cualquier shell si el espacio utilizado es para separar argumentos o parte de un argumento?
Julie Pelletier
2
@jamesdlin: Ve a quejarte sobre el bashproyecto de desarrollo, pero no olvides también golpear todos los proyectiles más antiguos y más nuevos mientras estás en ello. ¡Fuera y fuera!
Julie Pelletier
1
@JuliePelletier Solo digo que afirmas que es imposible para cualquier concha, pero las conchas como los peces se comportan exactamente como lo describe tbodt.
jamesdlin
28

La openutilidad en macOS no lee de la entrada estándar, pero toma sus argumentos de la línea de comando.

Para abrir el directorio de trabajo actual, tendría que decir

$ open "$( pwd )"

o

$ open "$PWD"

o simplemente

$ open .

como se señala en los comentarios a continuación.

Con el -findicador, opense puede hacer que se lea desde la entrada estándar, pero solo para abrir lo que reciba en el editor de texto predeterminado.

Kusalananda
fuente
1
Si el shell es (t) csh, desearía en su open $cwd:qlugar. Y open (pwd)/ open $PWDsi esfish
Stéphane Chazelas
1
@ StéphaneChazelas Creo que el shell predeterminado en Darwin es bash, pero siempre es bueno ver soluciones para otros shells también.
Kusalananda
Para completar, con rc, es, akangacáscaras: open `pwdoopen `{pwd}
Stéphane Chazelas
55
O puede usar la sintaxis open .para el directorio de trabajo actual o el directorio principal open .. o hasta dos directorios, open ../..etc.
fd0
@ StéphaneChazelas: ¿Por qué sería $cwd:qpreferible "$cwd"en un shell relacionado con csh?
G-Man dice 'Reincorporar a Monica' el
9

Las otras respuestas son totalmente correctas. Si desea una taquigrafía fácil , puede hacer lo que propuso @ fd0 y simplemente usar

open .

para abrir el directorio actual. El directorio actual se llama .(un solo punto) en Unix, el directorio padre ..(dos puntos).

serv-inc
fuente
9
pwd | xargs open

xargs introduce su entrada estándar en los argumentos de su primer argumento.

dbanet
fuente
2
Eso es solo si la ruta actual del directorio de trabajo no contiene espacios en blanco o líneas nuevas o comillas simples o comillas dobles o barras diagonales inversas.
Stéphane Chazelas
pwd | xargs -d '\n' open
belkka
0

Puede usar una canalización con -fpara abrir el contenido del comando anterior en un Editor de texto. Esto solo se aplica a los editores de texto. Para otras aplicaciones, deberá utilizar la sugerencia en las otras preguntas.

Por ejemplo:

ls | open -f

Esto abriría su editor de texto predeterminado con el lscontenido de salida.

También puede especificar el editor de texto para usar usando -a:

ls | open -a 'Atom' -f

Esto abriría Atom con el lscontenido de salida.

Pau Chorro
fuente