CD Comando Linux e Bandeiras Misteriosas

CD Comando Linux e Bandeiras Misteriosas

Plataforma: CentOS 6.2Concha:tcsh

Estou brincando com cdum script BASH e notei o maravilhosocd -opção, mas fiquei com muitas dúvidas...

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

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

  2. Você pode mergulhar mais fundo em sua história com -flag, como em um navegador?

    por exemplo, quando digito cd -, ele me leva ao diretório anterior, mas se eu digitar esse comando novamente, ele me leva ao diretório de onde acabei de vir, criando uma espécie de loop.

    É suportada uma abreviatura para voltar a vários níveis?

    EDITAR
    Sei que posso voltar com cd .., mas esperava que isso pudesse ser uma porta de entrada para costas menos detalhadas, por exemplo, cd -3vs. cd ../../../... espero que isso esclareça o que estou perguntando ....

    EDITAR2
    Quanto ao feedback atual, embora ..seja um diretório especial, não vejo uma razão pela qual o integrado cdao terminal não possa usar uma abreviação, por ../../ ... ../exemplo, cd ..5ou por que o integrado também não poderia ter um histórico (um la auto pushd/ popd) que pode ser ativado e usado como cd -3. Entendo que isso pode representar um risco de segurança/privacidade, mas não vejo como isso seja pior do que armazenar um histórico de comandos, o que a maioria dos shells/terminais faz.

  3. A página de manual para cd, acessível via man cde help cd(é a mesma para qualquer comando), apenas listas -Le -Psinalizadores.

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

    Estou certo ao assumir que os outros sinalizadores e a opção - (voltar) não são padrão?

  4. Para que servem as bandeiras -ne -v?

    Ambos parecem me levar de volta ao meu diretório inicial, foi tudo o que consegui descobrir por meio de experimentação.

Uma leitura rápida sobre recursos da web[1][2]ofereceu exatamente o mesmo tipo de informação que a página de manual ofereceu e não respondeu às minhas perguntas.

Nota: O segundo recurso centrado no Linux acima reivindicado cdtinha apenas duas opções (obviamente não é verdade em current CentOS), daí minha suposição de que essa funcionalidade poderia não ser padrão.

Responder1

  1. cd -não é o mesmo que cd ... O cd -comando vai para oanteriordiretório em que você estava. Por exemplo, se você estiver /home/bobe executar cd /var/log, executar cd -o levará de volta para /home/bob. cd ..por outro lado, sempre vai para o diretório pai.
  2. Se você quiser manter um histórico como esse, sugiro dar uma olhada pushde popdque 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 retroceder vários níveis na árvore de diretórios, que eu conheça não existe uma maneira comum. ..não é um recurso do shell, na verdade é um link de diretório especial em *nix que se refere ao diretório pai.

  3. cdé um comando integrado, portanto seus sinalizadores e seu uso podem variar de acordo com o shell. Mas, em geral, as opções para cdentrar bashem um sistema devem ser as mesmas que em outro sistema.

  4. Meu bashshell não lista nenhum desses sinalizadores... você está experimentando usar bashou tcsh? Se você estiver usando, tcshestará essencialmente usando um comando totalmente diferente, então provavelmente desejará executar bashe mexer cdnele.

EDITAR:

De acordo com a tcshpágina de manual:

Com -p, imprime a pilha de diretórios final, assim como dirs. Os sinalizadores -l, -n e -v têm o mesmo efeito no cd e nos dirs e implicam -p.

(Você pode verificar a seção sobre dirsse quiser ler os detalhes). Parece que basicamente está imprimindo a pilha de diretórios após a execução do comando:

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 -vparecem um pouco mais fáceis de ler. O topo da pilha (elemento 0) é o diretório atual e 1 é para onde você iria se executasse popduma vez e assim por diante.

informação relacionada