linux.playground

trilha / arco 1 · onde eu estou

o que é cd e o que ele faz

o script tinha cd e depois rm. o cd falhou, o script seguiu, e o rm apagou a pasta onde você estava. antes de qualquer comando que muda de lugar, uma pergunta: e se ele não mudar?

em poucos minutos: o que o cd faz, o que ele devolve quando falha, e a linha que impede o rm de rodar no lugar errado. a pílula fica no final.

o vídeo desta aula sai em breve.
a aula já funciona: lê, treina no terminal e faz o quiz.

escolhe a camada

em uma frase

é atravessar a porta de um cômodo para outro. se a porta está trancada, você continua no cômodo onde estava.

para quem está começando

muda a pasta onde o terminal está. sem erro, ele não imprime nada: quem confirma é o pwd. com erro, ele avisa e você fica onde estava.

a fonte da verdade

o cd não é um programa, é builtin do bash: ele muda o diretório do próprio shell. por isso não existe /bin/cd que funcione. o type cd mostra isso, e o $OLDPWD guarda a pasta de antes.

o número por trás do nome

o código de saída: 0 é deu certo, qualquer outro número é falha. o cd que não achou a pasta devolve 1. o echo $? mostra o último número.

mac vs linux

no mac o cd também é builtin, mas o /usr/bin/cd existe e não faz nada útil: ele muda a pasta de um processo que acaba na hora.

agora você

terminal fechado

um linux de verdade, só seu, apagado quando você sai.

  1. entra na pasta homelab e confirma com o pwd onde você ficou.

    cd homelab && pwd

  2. volta para a pasta onde você estava antes, sem digitar o caminho.

    cd -

  3. tenta entrar numa pasta que não existe e pergunta o código de saída com echo $?. qual número vem?

  4. pergunta ao bash o que é o cd.

    type cd

  5. agora a pegadinha. entra na homelab, cria uma variável DIR vazia e passa ela para o cd sem aspas. depois confere com o pwd.

    cd homelab; DIR=""; cd $DIR; pwd

cuidado: cd sem destino vai para a home

o arquivo ~/limpar-backups.sh apaga os .bak de uma pasta de backups antigos. ele recebe a pasta como argumento. só que o cd dele não confere nada, e rodando sem argumento ele vai para a home e apaga os .bak de lá. passo 1: veja o estrago. rode ~/limpar-backups.sh (sem nada depois) e depois ls. repare que contas.bak e notas.bak sumiram. para trazer tudo de volta, digite restaurar-backups (só esse nome, sem ./ e sem .sh). passo 2: conserte o script. abra com nano ~/limpar-backups.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. passo 3: teste. rode ~/limpar-backups.sh sem argumento e confira com ls que os .bak da home continuam lá.

a pílula

cd pastaentra na pasta
cd -volta para a anterior
cd "${DIR:?}" || exit 1para o script se o cd falhar

cd que falha deixa você onde estava.

quiz

1. um script faz cd numa pasta que não existe e depois rm -rf ./*. o que acontece?
2. DIR está vazia e o script faz cd $DIR sem aspas. para onde ele vai?
3. por que não existe um programa cd separado que funcione?

próxima: o que é cat e o que ele faz