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.
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ê
um linux de verdade, só seu, apagado quando você sai.
entra na pasta homelab e confirma com o pwd onde você ficou.
cd homelab && pwdvolta para a pasta onde você estava antes, sem digitar o caminho.
cd -tenta entrar numa pasta que não existe e pergunta o código de saída com echo $?. qual número vem?
pergunta ao bash o que é o cd.
type cdagora 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 pasta | entra na pasta |
cd - | volta para a anterior |
cd "${DIR:?}" || exit 1 | para o script se o cd falhar |
cd que falha deixa você onde estava.