¿Cómo consigo que un script bash se repita en un archivo nuevo?

¿Cómo consigo que un script bash se repita en un archivo nuevo?

Tengo un script bash. Quiero que este script se vuelva a crear en /usr/local/bin sin necesidad de un archivo adicional para hacerlo.

bash_a.sh:

ssh -t -t server-a.com "
cd /var/
irb
..etc
"

Estaba pensando algo así:

echo "
ssh -t -t server-a.com "
cd /var/
irb
..etc
"
" > /usr/local/bin/bash_a.sh

O esto:

cp bash_a.sh /usr/local/bin/bash_a.sh
ssh -t -t server-a.com "
cd /var/
irb
..etc
"

Respuesta1

Pruebe el truco de las comillas simples y dobles para su sugerencia:

echo '#!/bin/bash
ssh -t -t server-a.com "
cd /var/
irb
..etc
"
' > /usr/local/bin/bash_a.sh
chmod a+rx /usr/local/bin/bash_a.sh

Entre comillas simples, el shell maneja los datos sin cambios. Entre comillas dobles, el shell expande $variables, barras invertidas, comillas invertidas y todo tipo de cosas. Por lo tanto, utilice comillas simples siempre que sea posible.

Sin embargo, dentro de comillas simples no se pueden usar comillas simples fácilmente, mientras que las comillas dobles dentro de comillas simples son fáciles.

Dentro de comillas dobles túpoderUtilice comillas dobles, pero debe utilizar una barra invertida para escapar de ellas. Entonces echo "abc\"def\""impresiones abc"def".

Dentro de comillas dobles también puedes usar comillas simples, pero no detienen toda esa expansión. Entonces echo "abc'def'"impresiones abc'def'.

Puede utilizar comillas simples dentro de comillas simples, pero debe escribir: echo 'abc'\''def'\''hij'which prints abc'def'hij.

Respuesta2

Usando la respuesta en¿Puede un script Bash saber en qué directorio está almacenado?:

#!/bin/bash
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
BINDIR=/usr/local/bin
if [[ $DIR != $BINDIR && -w $BINDIR ]]
then
    cp "${BASH_SOURCE[0]}" $BINDIR
fi
... rest of script

Esto ifevita que el script intente copiarse a sí mismo si se ejecuta desde /usr/local/bin o si lo ejecuta un usuario que no tiene permiso para copiar allí.

información relacionada