Por que não posso canalizar `pwd` para` abrir` no macOS?

12

Isso é específico do macOS, mas parece muito pouco para a comunidade Ask Different .

No Terminal, eu posso pwdcopiar o resultado, digite opene cole o resultado e a pasta será aberta no Finder, mas

pwd | open

imprime a documentação de ajuda para open. Por que a tubulação não funciona, mas a colagem?

Mandril
fonte
isso só funcionará se aberto esperar que você digite o nome do diretório depois de pressionar enter.
Jasen
9
Além disso, este deve (não é usuário de Mac) trabalho: open .(para o diretório atual)
UniversallyUniqueID
@BharadwajRaju open .funciona e parece o mais fácil. ty.
Chuck

Respostas:

19

Como não tenho um Mac, não posso testá-lo, mas a solução deve ser algo como:

open "`pwd`"

Nem todos os programas obtêm sua contribuição da stdinqual seria necessário para o tubo funcionar.

Julie Pelletier
fonte
1
As aspas duplas são desnecessárias.
23616 tbodt
3
@tbodt: Experimente /var/tbodt's files.
Julie Pelletier
Eu pensaria que o bash trataria isso como um argumento ... É por isso que não uso o bash.
tbodt
2
@ tbodt: Como um shell saberia se o espaço usado é para separar argumentos ou parte de um argumento?
Julie Pelletier
2
@jamesdlin: Vá reclamar do bashprojeto de desenvolvimento, mas não se esqueça de também bater todos os shells mais antigos e os shells mais recentes enquanto estiver nisso. Fim de transmissão!
Julie Pelletier
27

O openutilitário no Mac não lê da entrada padrão, mas recebe seus argumentos na linha de comando.

Para abrir o diretório de trabalho atual, você teria que dizer

$ open "$( pwd )"

ou

$ open "$PWD"

ou simplesmente

$ open .

como apontado nos comentários abaixo.

Com o -fsinalizador, você openpode ler a partir da entrada padrão, mas apenas para abrir o que receber no editor de texto padrão.

Kusalananda
fonte
1
Se o shell for (t) csh, você preferiria open $cwd:q. E open (pwd)/ open $PWDse forfish
Stéphane Chazelas
1
@ StéphaneChazelas Acredito que o shell padrão em Darwin seja bash, mas é sempre bom ver soluções para outros shells também.
Kusalananda
Para completar, com rc, es, akangaconchas: open `pwdouopen `{pwd}
Stéphane Chazelas
5
Ou você pode usar a sintaxe open .para o diretório de trabalho atual ou o diretório pai open .. ou dois diretórios open ../..e assim por diante.
Fd0
@ StéphaneChazelas: Por que $cwd:qseria preferível "$cwd"em um shell relacionado ao csh?
G-Man diz 'Reinstate Monica'
9

As outras respostas estão totalmente corretas. Se você quiser uma abreviação fácil , faça como @ fd0 proposto e use

open .

para abrir o diretório atual. O diretório atual é nomeado .(um único ponto) no Unix, o diretório pai ..(dois pontos).

serv-inc
fonte
9
pwd | xargs open

xargs introduz sua entrada padrão nos argumentos de seu primeiro argumento.

dbanet
fonte
2
Isso é apenas se o caminho do diretório de trabalho atual não contiver espaços em branco ou nova linha ou aspas simples ou aspas duplas ou barras invertidas.
Stéphane Chazelas
pwd | xargs -d '\n' open
belkka
0

Você pode usar um pipeline com -fpara abrir o conteúdo do comando anterior em um Editor de texto. Isso se aplica apenas a editores de texto. Para outros aplicativos, você precisará usar a sugestão nas outras perguntas.

Por exemplo:

ls | open -f

Isso abriria seu editor de texto padrão com o lsconteúdo de saída.

Você também pode especificar o editor de texto a ser usado usando -a:

ls | open -a 'Atom' -f

Isso abriria o Atom com o lsconteúdo de saída.

Pau Chorro
fonte