Por que você deve executar o cd. antes de fazer alguma coisa?

22

Em esta compilação de horrores de sysadmin , um dos autores escreve, como um regra de ouro:

Always do a cd . before doing anything.

Por que você quer fazer isso?

    
por qdii 30.06.2013 / 13:28

3 respostas

32

Você não faz isso.

Pelo menos não apenas assim. A linha anterior no documento citado é importante:

  • Set up your prompt to do a pwd everytime you cd.
  • Always do a cd . before doing anything.

Dessa forma, você, como operador, verifica seu diretório de trabalho atual antes de fazer qualquer coisa importante, já que ele é impresso a cada alteração. cd . não faz nenhum sentido em contrário.

Essa "verificação" é uma coisa boa e você deve adaptar uma forma dela. Uma variação mais comum (IMHO) deste tema é sempre imprimir o diretório de trabalho no prompt.

    
por 30.06.2013 / 13:52
18

Se o diretório de trabalho atual do seu shell for removido, é possível perder dados.

Por exemplo,

$ pwd
/home/user/test
$ rmdir /home/user/test
$ pwd
/home/user/test
$ some_command | tee command.log
tee: command.log: No such file or directory
<long output>

A saída de some_command não foi gravada no disco.

Digitar cd . antes de executar um comando revelaria o problema.

$ pwd
/home/user/test
$ rmdir /home/user/test
$ cd .
$ pwd
.

Se o diretório atual do diretório de trabalho fosse removido e recriado, digitar cd . "atualizaria" a referência para esse diretório.

$ ls
foo bar ljz
$ pwd
/home/user/test
$ rmdir /home/user/test
$ mkdir /home/user/test
$ pwd
/home/user/test
$ ls
$ cd .
$ ls 
foo bar ljz
    
por 30.06.2013 / 20:56
13

Acho mais importante mostrar seu diretório atual.

Em cada servidor linux, modifico o prompt em /etc/bashrc alterando "W" para "w".

 [ "$PS1" = "\s-\v\\$ " ] && PS1="[\u@\h \W]\$ "

para

 [ "$PS1" = "\s-\v\\$ " ] && PS1="[\u@\h \w]\$ "

O efeito disso é:

[root@xt include]#

versus

[root@xt /usr/src/spl-0.6.1/include]# 
    
por 30.06.2013 / 16:00