Eu quero criar um arquivo a partir de um script bash. Mas preciso expandir algumas variáveis e imprimir outras literalmente isso é possível?
cat <<EOF > file.sh
$EXPAND
$PRINTLITERALLY
EOF
Também estou tentando criar um arquivo muito grande, quando tento colá-lo no meu terminal para testar recebo erros como:
-bash: urlencode: command not found
Então parece que eu posso ter coisas lá que o bash está interpretando, isso afetará meu script bash ao executá-lo? Eu sinto que deve haver uma maneira melhor de criar arquivos dos meus scripts bash
criaria
file.sh
comcomo conteúdos.
(você precisaria adicionar uma barra invertida antes de cada ocorrência
$
ou`
onde você não deseja que a expansão de parâmetro correspondente, expansão aritmética ou substituição de comando seja expandida. E você também precisaria escapar alguns caracteres de barra invertida).Outra abordagem:
Os documentos aqui onde o delimitador é citado (como
3<< 'NOT-EXPANDED'
acima) não sofrem expansões de shell, então você pode decidir de seções onde as expansões são executadas e outras onde elas não são.Com o acima, você obteria:
Se você quisesse expandir apenas um conjunto específico de variáveis onde quer que elas aparecessem, deixando todas as outras expansões de parâmetros, substituições de comandos, expansões aritméticas não expandidas, você poderia usar o
envsubst
utilitário fornecido com o GNUgettext
.Observe, no entanto, que ele apenas expande
$var
e${var}
, não qualquer outra forma de expansão de parâmetro envolvendo a$var
variável (como${var#?}
,${var[x]}
...)dá:
Veja
info gettext envsubst
para mais detalhes.