Bash Shell - Como entrar dentro de directorias utilizando script?

Iniciado por jtmdias, 20 de Abril de 2011, 16:23

tópico anterior - próximo tópico

jtmdias

Viva! Bom dia, boa tarde, ou boa noite!

Estou aqui com uma dúvida, que não consigo resolver.
Escrevi um script que instala umas dependências, vai buscar um ficheiro tar.gz, extrai para uma pasta, mas que depois não me possibilita entrar nela através do comando cd, coisa que não percebo. Porque se meter "cd /home/user/nome-da-pasta" no terminal, ele entra, mas dentro de um script, não processa a mesma instrução.

Mas aqui está o código (ele para quando quero entrar dentro da directoria)


#!/bin/bash
# Script de Correcção de Downgrade do GDM para a versão 2.20.10
clear
echo "|*****************************************************************|"
echo "|   Bem-Vindo ao Script de Downgrade do GDM para a versão 2.20.10 |"
echo "|*****************************************************************|"


### Detecção das Permissões do Utilizador. Necessita de Permissões de Root
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "AVISO!"
echo "Este script só poderá ser executado se tiver permissões de administração."
echo "Para executar o ficheiro com permissões de administração deverá:"
echo "1- escrever 'sudo' antes do restante comando"
echo "2- Possuir/Conhecer a(s) password(s) de Administração"
echo "Operação Terminada Sem Êxito. Pode fechar a janela."
exit 99
fi

echo "Aviso: Este script irá alterar definições no seu Sistema Operativo. Use por sua conta e risco."
read -p  "Pretende Continuar ? [S]im, [N]ao : " response

case $response in
[Ss]* )
## Instalação das dependências
                echo "A Instalar dependências necessárias... "
sudo apt-get install intltool libglade2-dev libgnomecanvas2-dev librsvg2-dev libart-2.0-dev libdbus-glib-1-dev libpopt-dev

                ### Vai buscar o GDM 2.20, pede o nome user  e extrai para /home/user/gdm-2.20.10
sudo wget https://launchpad.net/ubuntu/+archive/primary/+files/gdm_2.20.10.orig.tar.gz
echo "Escreva o seu nome de utilizador do eos: "
read username
sudo tar -xvzf gdm_2.20.10.orig.tar.gz
                clear

                ## Entra dentro da pasta gdm-2.20.10 e processa a instalação
                cd /home/$username/gdm-2.20.10 ## <-- Não está a funcionar!
                ./configure --prefix=/usr
sudo make check
sudo make
sudo make install

## Remove a directoria de instalação e o ficheiro
sudo rm -r /home/$username/gdm-2.20.10
sudo rm /home/$username/gdm_2.20.10.orig.tar.gz
clear

### Pergunta se o utilizador deseja reiniciar o Linux.
echo "Todas as alterações foram efectuadas com sucesso.."
echo "É necessário reiniciar o seu computador. Guarde Todos os seus documentos antes de prosseguir, por favor."
read -p "Pretende Reiniciar agora? [S]im, [N]ao : " reiniciar

case $reiniciar in
[Ss]) sudo reboot now;;
[Nn]) echo "Não se esqueça que terá que reiniciar o seu computador para as alterações terem efeito."
exit 99
esac;;
*) echo "Operação Cancelada." exit;;
esac


Como é que isto se resolve? É que deve ser algo tão fácil de resolver, e eu não consigo chegar lá (argh, a frustração!  :D)

Obrigado a todos desde já :)
sudo apt-get moo

irtigor

O nome tem espaço ou acento? Você está fazendo uso desnecessário do sudo, já existe uma variável do ambiente com o nome $USERNAME (é, caixa alta) e o comando whoami. Também usaria um local mais adequado pra extração temporária (/tmp, é só usar o -C do tar, se não sabe).

jtmdias

Nada de espaços e acentos.
Então escuso de perguntar o nome do utilizador, certo?
Qual a diferença entre extrair para /home/user/ e apagar no final tudo e extrair para /tmp e apagar no final? (essa parte do -C eu sei, felizmente :) )

Obrigado desde já :)
sudo apt-get moo

irtigor

A diferença é que a pasta /tmp foi feita para arquivos temporários, já a ~ não. Use o nome entre aspas (ex: cd "/home/$username/gdm-2.20.10"), isso deve evitar o problema de nomes com espaços e acentos, fora isso, não vejo nada errado no código.

jtmdias

Citação de: irtigor online 20 de Abril de 2011, 19:18
A diferença é que a pasta /tmp foi feita para arquivos temporários, já a ~ não. Use o nome entre aspas (ex: cd "/home/$username/gdm-2.20.10"), isso deve evitar o problema de nomes com espaços e acentos, fora isso, não vejo nada errado no código.

haha, e não há mesmo, eu é que fiz aqui umas confusões. Realmente era mesmo fácil.
Corri de novo o script, e funcionou.
Obrigadíssimo :)

Já agora, sabe se há possibilidade de inserir scripts ainda durante a instalação do Ubuntu? E o menu de instalação? É possível ser modificado?
sudo apt-get moo