Comando cd no bash não funciona [RESOLVIDO]

1. Comando cd no bash não funciona [RESOLVIDO]

HTR
htr

(usa CentOS)

Enviado em 22/12/2009 - 15:36h

Amigos,

estou usando um simples script onde copio um diretório (o nome dele é fornecido pelo usuário, ou seja, é o parâmetro $1) para outro lugar e depois de terminada esta cópia, caminho para este destino, no entanto, o comando cd não funciona:
#!/bin/bash
cp $1 /disk1
cd /disk/$1

Alguém poderia me ajudar?

Obrigado.




  


2. MELHOR RESPOSTA

Jefferson Diego
Diede

(usa Debian)

Enviado em 23/12/2009 - 00:31h

Como disse o fdmarp, há uma certa confusão com o comando cd.
O cd é um built-in do shell, o que quer dizer a grosso modo que o que é feito por ele permanece mesmo depois que o processo se encerra, e é passado a processos filhos, por estar numa espécie de mapa de memória.
Se eu entendi bem, você quer que depois da finalização do seu script, o usuário caia em disk1/$1, não é?
Isso não pode ser feito desta forma, pois o "cd" que você deu pertence ao shell do seu script, que é filho do shell que o chamou (as mudanças vão de pai para filho, mas não de filho para pai).
No cmd ou no command isso funcionaria, mas eles nem são shells de verdade :-) (...)

Se for isso mesmo (o usuário cair no diretório disk1/$1), só vai funcionar (ao que eu sei) se ele estiver em um shell filho do shell do script. É meio gambiarra, mas você pode fazer assim:

#!/bin/bash
cp -R "$1" /disk
cd /disk$1
bash


3. Re: Comando cd no bash não funciona [RESOLVIDO]

Filippe
spolti

(usa Fedora)

Enviado em 22/12/2009 - 15:50h

Mano. tem dois problemas visíveis aí,
ex: se o usuario digitar etc ele não vai copiar pq não tem a barra....
o outro é, você já possui este diretório criado? disk1???
e também o disk do cd esta sem o 1, como não sei qual é o nome correto verifique isso

uma sintaxe simplse seria
./script.sh /var
no script ficaria assim:
#!/bin/bash
cp $1/disk1 (/var/disk1)
cd /disk$1 (/disk1/var)

caso não funcione coloque crase nos comandos ficaria assim

#!/bin/bash
`cp $1/disk1`
`cd /disk$1`

Abraços


4. Re: Comando cd no bash não funciona [RESOLVIDO]

HTR
htr

(usa CentOS)

Enviado em 22/12/2009 - 16:16h

Não funcionou nem com a crase. Com relação ao disk, eu me esqueci de colocar o 1 e este diretório já existe.
#!/bin/bash
cp $1 /disk1 --> $1 é o nome de um diretório que já existe e q será copiado para o dir disk1
cd /disk1/$1 --> aqui desejo, depois de feita a cópia, caminhar para o diretório /disk2/<nome-do-diretório-especificado-no-parâmetro-$1>





5. Re: Comando cd no bash não funciona [RESOLVIDO]

HTR
htr

(usa CentOS)

Enviado em 22/12/2009 - 16:37h

Mas tem q haver este espaço, estou copiando o diretório especificado em $1 para o diretório /disk1, compreende? E depois de copiado, caminho até ele.



6. Re: Comando cd no bash não funciona [RESOLVIDO]

Filippe
spolti

(usa Fedora)

Enviado em 22/12/2009 - 16:42h

dá um cp -r, porque como é diretório ele tem que copiar recursivamente.
fica mais ou menos assim:
#!/bin/bash

cp -r $1/ /disk1/

cd /root/disk1/$1/



7. Re: Comando cd no bash não funciona [RESOLVIDO]

HTR
htr

(usa CentOS)

Enviado em 22/12/2009 - 16:44h

Sim, eu já fiz isto. Veja bem, o diretório é copiado para onde quero, o problema é o bendito do cd... ele não me leva para o diretório pretendido.


8. Re: Comando cd no bash não funciona [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/12/2009 - 17:48h

tem certeza que o diretorio eh /disk1??

ou seria ./disk1

/disk1 seria uma pasta disk1 na raiz

vamos ver como ficaria entao

suponha que o nome do script seja teste.sh

----------------------------------------------------------
#!/bin/bash

cp "$1" /disk
cd /disk/"$1"
----------------------------------------------------------

$ sh teste.sh /home/pasta1/pasta2

a execução seria assim

cp "/home/pasta1/pasta2" /disk1 # vc tem permissão de escrita no diretorio /disk???

cd /disk//home/pasta1/pasta2 # vc colou uma parra no final do disk

e outra vc está copiando uma pasta, ai vc tem que usar recursividade "-R"

axo que o certo seria assim

--------------------------------------------------------
#!/bin/bash
cp -R "$1" /disk
cd /disk$1
------------------------------------

$ teste.sh /home/usuario/backup

ai o diretorio seria /disk/backup


9. Re: Comando cd no bash não funciona [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 22/12/2009 - 18:51h

Acho que está havendo uma confusão ... você não está naquele diretório, seu script sim!!!

tente isso:
#---------------------
cp -r $1 disk1/
cd disk1/$1
ls
#---------------------

você verá que serão listados os arquivos do seu diretório ... pelo que entendi o que vc quer é que ao terminar de rodar o script te deixasse no caminho disk1 ... estou certo?



10. Re: Comando cd no bash não funciona [RESOLVIDO]

HTR
htr

(usa CentOS)

Enviado em 23/12/2009 - 07:16h

Olá meus amigos,

funcionou! Ufa! O Diede me deu a solução:
#!/bin/bash
cp -R "$1" /disk
cd /disk/$1
bash

bom, apenas respondendo alguns questionamentos:
o /disk está na raiz e eu tenho permissão para copiar um diretório (como eu queria) lá;
eu usei o tempo todo o -R, mas não o citei pois julguei que não era necessário (desculpem-me, percebi q mtos se preocuparam com isto, da próxima eu coloco tudo o que realmente fiz);
A explicação do Diede deixou mais claro as coisas sobre processos pai e filho.

No entanto, uma última pergunta, com o "bash" na última linha, percebo q fiquei sem o path completo no meu prompt, tipo, era assim:
/disk2/htr
agora ficou assim:
htr@nome-máquina
como faço para que eu tenha o path completo novamente, isto auxilia o usuário para que ele saiba em que caminho está.
Obrigado a todos q contribuíram!!!


11. Re: Comando cd no bash não funciona [RESOLVIDO]

Jefferson Diego
Diede

(usa Debian)

Enviado em 23/12/2009 - 23:16h

Estranho seu "path" não estar completo... mas, isso varia de distro para distro...
O que você pode tentar, é deixar o script assim:

#!/bin/bash
#Verifica se há uma declaração à PS1 (dentre outras coisas, controla o textinho lado esquerdo da linha, antes dos comandos, que em geral é Usuario@Maquina:diretorio
if [ $(cat /home/jefferson/.bashrc| grep -i PS1| wc -L) = 0 ]; then
#Se não tiver, adiciona, para ela entrar em vigor no novo bash
echo PS1="'"$PS1"'" >> ~/.bashrc
fi
echo $PATH
cp $1 /disk1
cd /disk/$1
#Aqui, o processo novo do bash irá processar o ~/.bashrc, e carregar a PS1 no formato login@Maquina:dir
bash






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts