cd Comando Linux e Flags Misteriosos

1

Plataforma: CentOS 6.2 Shell: tcsh

Estou brincando com cd para um script BASH e notei o maravilhoso cd - option , mas ficou com muitas perguntas ...

  1. Por que o cd - ? Isso não é redundante com cd .. ?

    EDIT
    [Como aponta FatalError, esses dois comandos não fazem as mesmas coisas ... então a resposta é "não"]

  2. Você pode se aprofundar mais em seu histórico com - flag, a la em um navegador? Por exemplo, por exemplo Quando eu digito cd - , ele me leva ao meu diretório anterior, mas se eu entrar nesse comando novamente, ele me levará para o diretório que acabei de criar, criando uma espécie de loop.

    É uma forma abreviada de voltar vários níveis suportados?

    EDITAR
    Eu percebo que posso voltar com cd .. , mas esperava que isso pudesse ser uma porta de entrada para uma volta profunda menos detalhada, por exemplo cd -3 vs. cd ../../../ ... espero esclarecer o que estou perguntando ....

    EDIT2
    Sobre o feedback atual, enquanto .. é um diretório especial, não vejo uma razão pela qual o cd embutido no terminal não possa usar um atalho para ../../ ... ../ , por exemplo cd ..5 ou por que o built-in também não poderia ter um histórico (a la auto pushd / popd ) que poderia ser ativado e usado como cd -3 . Eu entendo que isso pode ser um pouco de risco de segurança / privacidade, mas não vejo como é pior do que armazenar um histórico de comandos, que a maioria das shells / terminais faz.

  3. A página de manual para cd , acessível via man cd e help cd (é a mesma para qualquer comando), lista apenas -L e -P flags.

    No entanto, quando eu digito cd --help , ele gera Usage: cd [-plvn][-|<dir>]. .

    Estou certo em assumir que as outras bandeiras e a opção - (de volta) estão fora do padrão?

  4. Para que são as bandeiras -n e -v ?

    Ambos parecem me levar de volta para o meu diretório pessoal, isso é tudo que consegui descobrir através da experimentação.

Uma rápida leitura nos recursos da web [1] [2] oferecia o mesmo tipo de informação que a página man e não respondia às minhas perguntas.

Nota: O segundo recurso centrado no Linux acima afirmou que cd tinha apenas duas opções (obviamente não é verdade no atual CentOS ), portanto, minha suposição de que essa funcionalidade poderia ser não padrão.

    
por Jason R. Mick 25.04.2012 / 21:57

1 resposta

3
  1. cd - não é o mesmo que cd .. . O comando cd - vai para o diretório anterior em que você estava. Por exemplo, se você estiver em /home/bob e executar cd /var/log , a execução de cd - levará você de volta %código%. /home/bob , por outro lado, sempre vai para o diretório pai.
  2. Se você deseja manter um histórico como esse, sugiro verificar cd .. e pushd , o que permitirá usar uma "pilha de diretórios":

    user@host:/etc/init.d$ pushd /var/log
    /var/log /etc/init.d
    user@host:/var/log$ pushd /tmp
    /tmp /var/log /etc/init.d
    user@host:/tmp$ popd
    /var/log /etc/init.d
    user@host:/var/log$ popd
    /etc/init.d
    

    Quanto a voltar vários níveis na árvore de diretórios, não há uma maneira comum que eu conheça. popd não é um recurso do shell, na verdade é um link de diretório especial no * nix que se refere ao diretório pai.

  3. .. é um comando incorporado, portanto, os sinalizadores e o uso podem variar por shell. Mas, em geral, as opções para cd in cd em um sistema devem ser as mesmas que em outro sistema.

  4. Meu bash shell não lista nenhum desses sinalizadores ... você está experimentando usando bash ou bash ? Se você está usando tcsh , você está essencialmente usando um comando totalmente diferente, então você provavelmente deseja executar tcsh e mexer com bash .

EDITAR:

De acordo com a página cd man:

With -p, prints the final directory stack, just like dirs. The -l, -n and -v flags have the same effect on cd as on dirs, and they imply -p.

(Você pode verificar a seção sobre tcsh se você quiser ler os detalhes). Parece que basicamente está imprimindo a pilha de diretórios depois que o comando é executado:

host:43> pushd /etc/init.d
/etc/init.d ~ 
host:44> pushd /var/log
/var/log /etc/init.d ~ 
host:45> pushd /tmp
/tmp /var/log /etc/init.d ~ 
host:46> cd -p
~ /var/log /etc/init.d ~ 
host:47> cd -v
0       ~
1       /var/log
2       /etc/init.d
3       ~
host:48> popd
/var/log /etc/init.d ~ 
host:49> cd -v
0       ~
1       /etc/init.d
2       ~

ambos mostram a pilha de diretórios, mas dirs parece um pouco mais fácil de ler. O topo da pilha (elemento 0) é o diretório atual, e 1 é onde você iria se você executasse -v uma vez, e assim por diante.

    
por 25.04.2012 / 22:08

Tags