Copie o conteúdo de um script para outro script

0

Sou muito novo no UNIX e atualmente estou tentando aprender Bash.

Eu tenho três scripts: xyz.sh , abc.sh & %código%. Quero copiar o conteúdo de wow.sh como é para xyz.sh usando wow.sh , ou seja, um script para copiar um script para outro.

xyz.sh:

echo "\n code $code \n"

abc.sh:

while read line
do
   echo $line >> wow.sh
done < xyz.sh

Na execução de abc.sh, o conteúdo de wow.sh é

echo "n code $code n"

\ n é convertido em n, alguém pode explicar por que isso está acontecendo e se há uma solução alternativa para manter \ n como \ n?

Além disso, se uma pergunta semelhante tiver sido feita antes, por gentileza, forneça um link, não consegui encontrar nenhum.

    
por Ouditchya Sinha 18.10.2016 / 19:54

1 resposta

2

Se você quiser acrescentar (o conteúdo de) xyz.sh a wow.sh , a maneira mais simples é esta:

cat xyz.sh >> wow.sh

Usar read para obter o mesmo resultado não é tão direto quanto parece. \ é um caractere especial no shell. Você teria que usar a opção -r , o que significa:

    -r      do not allow backslashes to escape any characters

cat faz isso por padrão. Além disso, read não é a ferramenta correta para fazer esse tipo de operação. A intuição deve dizer o mesmo quando você compara a sintaxe para ambos os comandos.

Há mais um comando em que você pode se interessar. É o source builtin, também chamado por . . Se você originar um arquivo do seu script, ele funcionará como se o conteúdo do arquivo originado estivesse presente no script. Então, colocando esta linha em wow.sh :

. xyz.sh

ou

source xyz.sh

não copia o conteúdo de xyz.sh para wow.sh , mas o próprio conteúdo de xyz.sh é executado enquanto wow.sh é executado, como se estivesse presente no script. Claro que apenas se o arquivo xyz.sh estiver presente durante a execução do script wow.sh .

    
por 18.10.2016 / 20:14