Pourquoi ne puis-je pas diriger `pwd` vers` open` sur macOS?

12

Ceci est spécifique à macOS, mais semble trop unixy pour aller dans la communauté Ask Different .

Dans Terminal, je peux pwdcopier le résultat, taper openet coller le résultat et le dossier s'ouvrira dans le Finder, mais

pwd | open

imprime la documentation d'aide pour open. Pourquoi la tuyauterie ne fonctionne pas, mais le collage?

Mandrin
la source
cela ne fonctionnera que si open s'attend à ce que vous tapiez le nom du répertoire après avoir appuyé sur Entrée.
Jasen
9
En outre, cela devrait (pas un utilisateur Mac) fonctionner: open .(pour le répertoire actuel)
UniversallyUniqueID
@BharadwajRaju open .fonctionne et semble le plus simple. ty.
Chuck

Réponses:

20

Je n'ai pas de Mac donc je ne peux pas le tester, mais la solution devrait être quelque chose comme:

open "`pwd`"

Tous les programmes ne prennent pas leur entrée, stdince qui serait nécessaire au fonctionnement du tuyau.

Julie Pelletier
la source
1
Les guillemets doubles sont inutiles.
tbodt
4
@tbodt: Essayez-le /var/tbodt's files.
Julie Pelletier
2
@tbodt: Comment un shell pourrait-il savoir si l'espace utilisé est pour séparer des arguments ou une partie d'un argument?
Julie Pelletier
2
@jamesdlin: Allez vous plaindre du bashprojet de développement, mais n'oubliez pas d'aller aussi bash tous les shells plus anciens et les plus récents pendant que vous y êtes. Encore et encore!
Julie Pelletier
1
@JuliePelletier Je dis simplement que vous prétendez que c'est impossible pour n'importe quelle coquille, mais les coquilles comme les poissons se comportent exactement comme tbodt le décrit.
jamesdlin
28

L' openutilitaire sur macOS ne lit pas à partir de l'entrée standard, mais prend ses arguments depuis la ligne de commande.

Pour ouvrir le répertoire de travail actuel, il faudrait dire

$ open "$( pwd )"

ou

$ open "$PWD"

ou simplement

$ open .

comme indiqué dans les commentaires ci-dessous.

Avec l' -findicateur, openpeut être fait pour lire à partir de l'entrée standard, mais uniquement pour ouvrir tout ce qu'il reçoit dans l'éditeur de texte par défaut.

Kusalananda
la source
1
Si le shell est (t) csh, vous voudriez open $cwd:qplutôt. Et open (pwd)/ open $PWDsi c'est le casfish
Stéphane Chazelas
1
@ StéphaneChazelas Je crois que le shell par défaut sur Darwin est bash, mais c'est toujours bien de voir des solutions pour d'autres shells aussi.
Kusalananda
Pour être complet, avec rc, es, akangacoquilles: open `pwdouopen `{pwd}
Stéphane Chazelas
5
Ou vous pouvez utiliser la syntaxe - open .pour le répertoire de travail en cours ou le répertoire parent open .. ou deux répertoires open ../..et ainsi de suite.
fd0
@ StéphaneChazelas: Pourquoi serait- $cwd:qil préférable à "$cwd"un shell lié à csh?
G-Man dit `` Réintègre Monica '' le
9

Les autres réponses sont totalement correctes. Si vous voulez un raccourci facile , vous pouvez faire comme proposé @ fd0 , et simplement utiliser

open .

pour ouvrir le répertoire courant. Le répertoire courant est nommé .(un seul point) sous Unix, le répertoire parent ..(deux points).

serv-inc
la source
9
pwd | xargs open

xargs place son entrée standard dans les arguments de son premier argument.

dbanet
la source
2
C'est seulement si le chemin du répertoire de travail actuel ne contient pas de blancs ou de retour à la ligne ou des guillemets simples ou des guillemets doubles ou des barres obliques inverses.
Stéphane Chazelas
pwd | xargs -d '\n' open
belkka
0

Vous pouvez utiliser un pipeline avec -fpour ouvrir le contenu de la commande précédente dans un éditeur de texte. Cela s'applique uniquement aux éditeurs de texte. Pour les autres applications, vous devrez utiliser la suggestion des autres questions.

Par exemple:

ls | open -f

Cela ouvrirait votre éditeur de texte par défaut avec le lscontenu de sortie.

Vous pouvez également spécifier l'éditeur de texte à utiliser en utilisant -a:

ls | open -a 'Atom' -f

Cela ouvrirait Atom avec le lscontenu de sortie.

Pau Chorro
la source