cd -
pode alternar entre o diretório atual e o diretório anterior.
Parece que eu já vi -
usado como argumentos para outros comandos antes, embora não me lembre se -
significa o mesmo que com cd
.
Eu descobri que -
isso não funciona ls
.
É -
usado apenas com cd?
cd
é um comando interno, não externo (nem teria como sequer funcionar como um).cd -
é, portanto, um recurso no nível do shell.git checkout -
para mudar para o ramo anterior-
usados com outros builtins da mesma maneira?pushd
, como sim. Caso contrário, o significado de "diretório anterior" não é um padrão muito útil.Respostas:
As diretrizes de sintaxe do utilitário POSIX (especificamente nº 13) especificam que, para utilitários que esperam ler um nome de arquivo,
-
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údosomefile
para sua saída padrão, seguido pelo que lê em sua entrada padrão.Esta diretriz não se aplica ao
cd
comando, pois não lê ou grava em um arquivo.cd
faz algo diferente: o argumento-
significa "o diretório anterior". O comandocd -
é equivalente acd "$OLDPWD" && pwd
. Esse comportamento é específico aocd
comando e a comandos diretamente inspirados, comopushd
.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
, mascd -- -
é o mesmo quecd -
, não muda para um diretório chamado-
. Da mesma forma,cat -- -
não lê de um arquivo chamado,-
mas de entrada padrão.fonte
-
é definido nas Diretrizes de sintaxe do utilitário POSIX como entrada padrão:Você pode ver esta definição para utilitários que operam com arquivos para leitura ou gravação.
cd
não pertence a esses utilitários, portanto,-
no cd não segue esta diretriz.Além disso, POSIX também definido
-
tem significado próprio com cd :fonte
cd -
é realmente uma abreviação paracd "$OLDPWD" && pwd
, onde$OLDPWD
é definido toda vez que você altera os diretórios para o diretório em que estava.O manuseio
-
depende da aplicação. Alguns aplicativos usam-
para significarSTDIN
, por exemplogrep
,awk
Outros aplicativos podem ser usados
-
como atalho para qualquer coisa que escolherem, como a resposta de Michael especifica, comsu
,-
é atalho para--login
fonte
Embora Michael menciona que
su
e outros aplicativos podem usar-
para dizer o que quiserem (leia de stdin é comum), Git faz uso-
de uma forma semelhante à forma comocd
faz , para mudar ramos.fonte
Qualquer programa pode usar
-
como argumento, para significar o que quiser. Um exemplo comum ésu
, que usa-
como abreviação de--login
. A única convenção em que consigo pensar é que os programas que lêem arquivos costumam-
significar "ler a partir de stdin" , mas isso depende inteiramente do programafonte
Adicionando meus dois centavos aqui. Eu uso '-' para instruir a ferramenta ps2pdf a ler da entrada padrão, como várias pessoas sugeriram anteriormente:
O one-liner acima cria uma versão em pdf da página de manual para ls no diretório atual.
Espero que alguém ache útil :).
fonte
Como respondido por gnouc ,
-
tem seu próprio significado emcd
.No entanto, você pode replicar o comportamento de
-
outros programas usando~-
. Por exemplo:fonte