É '-' usado somente com cd?

45

cd - pode alternar entre o diretório atual e o anterior.

Parece que eu tenho visto - usado como argumentos para outros comandos antes, embora eu não me lembre se - significa o mesmo que com cd .

Descobri que - não funciona com ls .

- é usado apenas com cd?

    
por Tim 28.07.2014 / 07:28

7 respostas

22

As diretrizes de sintaxe do utilitário POSIX (especificamente # 13) especificam que, para os utilitários que esperar que um nome de arquivo seja lido, - significa entrada padrão e, para utilitários que esperam que um nome de arquivo seja gravado, - significa saída padrão. Por exemplo, cat somefile - copia o conteúdo de somefile para sua saída padrão, seguido pelo que lê em sua entrada padrão.

Esta diretriz não se aplica ao comando cd , pois não lê ou grava em um arquivo. cd faz algo diferente: o argumento - significa “o diretório anterior”. O comando cd - é equivalente a cd "$OLDPWD" && pwd . Esse comportamento é específico para o comando cd e para comandos diretamente inspirados, como pushd .

Observe que - é um operando, não uma opção. Somente argumentos que começam com - e não são apenas - ou -- são opções. A principal implicação de ser um operando é que -- não afeta seu significado especial. Por exemplo, cd -- -P muda para um subdiretório chamado -P , mas cd -- - é o mesmo que cd - , ele não muda para um diretório chamado - . Da mesma forma, cat -- - não lê de um arquivo chamado - , mas da entrada padrão.

    
por 29.07.2014 / 02:49
46

- é definido em Diretrizes de Sintaxe do Utilitário POSIX como entrada padrão:

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

Você pode ver essa definição para utilitários que operam com arquivos para leitura ou gravação. cd não pertence a esses utilitários, portanto, - in cd não segue essa diretriz.

Além disso, POSIX também definiu - tem significado próprio com cd :

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.
    
por 28.07.2014 / 07:40
36

cd - é, na verdade, uma abreviação de cd "$OLDPWD" && pwd , em que $OLDPWD é definido toda vez que você altera os diretórios para o diretório em que estava.

O tratamento de - depende do aplicativo. Alguns aplicativos usam - para significar STDIN , por exemplo grep , awk

Outros aplicativos podem usar - como uma abreviação para qualquer coisa que escolherem, como a resposta de Michael especifica, com su , - é a abreviação de --login

    
por 28.07.2014 / 07:34
19

Embora Michael mencione que su e outros aplicativos podem usar - para significar o que quiserem (leia-se stdin é comum), o Git usa - de maneira semelhante a cd , para alterar as ramificações.

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master
    
por 28.07.2014 / 07:38
18

Qualquer programa pode usar - como argumento, para indicar o que quiser. Um exemplo comum é su , que usa - como atalho para --login . A única convenção em que consigo pensar é que os programas que lêem arquivos freqüentemente usam - para significar " read from stdin ", mas depende inteiramente do programa

    
por 28.07.2014 / 07:34
2

Adicionando meus dois centavos aqui. Eu uso '-' para dizer à ferramenta ps2pdf para ler a entrada padrão, como várias pessoas sugeriram anteriormente:

man -t ls | ps2pdf - ls.pdf

O one-liner acima cria uma versão em pdf da página man do ls no diretório atual.
Espero que alguém ache útil:).

    
por 31.07.2014 / 22:13
2

Como foi respondido por gnouc , - tem seu próprio significado em cd .

No entanto, você pode replicar o comportamento de - em outros programas usando ~- . Por exemplo:

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
    
por 02.08.2014 / 11:24