Ao tentar instalar o dropbox a partir da linha de comando, li os comandos
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
o que -
significa aqui? é o diretório anterior?
command-line
tar
Álgebra
fonte
fonte
f -
. Isso pode facilitar a localização das respostas nas páginas de manual.wget
etar
. Dessa forma, os respectivos desenvolvedores podem melhorar sua documentação para que os usuários futuros não tropeçam nos mesmos problemas novamente. Em outras palavras: seja um herói e faça do mundo um lugar melhor!$TAPE
esteja definido.Respostas:
Alguns comandos aceitam
-
no lugar de um nome de arquivo:-
argumento passado parawget
depois-O
está fazendo.-
argumento foi passadotar
depoisxzf
.O comando que você mostrou faz o download de um arquivo
wget
morto e o descompactatar
. Para conseguir isso, a saída dewget
é canalizada (|
) para a entrada detar
. É por isso quewget
grava na saída padrão em vez de em um arquivo etar
lê na entrada padrão em vez de em um arquivo.fonte
-
. . Então , se-
é um operando de uma "opção de arquivo" e isso tem um significado especial, em seguida, ele deve ser o de stdin / stdout. O programa é livre para não ser tratado como um caso especial e simplesmente procurar um arquivo-
-
)-
especialmente, tratando-o como um nome de arquivo literal. A única maneira de ir contra a diretriz é tratando-
especialmente, mas com algum outro significado que não o sugerido pela diretriz.Esse é apenas um nome de arquivo que muitos programas Unix interpretam como "em vez de realmente abrir um arquivo, ler
stdin
(ou escrever parastdout
)".Isso significa ler da entrada que é transmitida para o programa; no seu caso, essa é a saída do wget.
fonte
./-
se realmente deseja abrir um arquivo chamado-
.stdin
é um descritor de arquivo e-
é o nome que você fornece para usá-lo. Porém, não é um nome de arquivo da perspectiva do sistema operacional. Somente da perspectiva do usuário./dev/stdin
é apenas um nome de arquivo de conveniência oferecido por algumas instalações do kernel. Geralmente nãofopen("/dev/stdin", "r")
acontece nada em nenhum lugar quando você escreve um programa que escolhe usar stdin; você apenas segue em frente e usa oextern FILE* stdin
que seu cabeçalho libc lhe forneceu; a propósito, esse é o descritor de arquivo inteiro0
.O
-
argumento paratar
especifica que o arquivo deve ser lido emstdin
vez de um arquivo. No manual do GNU tar :Outros comandos têm o mesmo comportamento e é especificado pelo padrão POSIX.1-2017 :
fonte