Para conteúdo de texto, o mais fácil, especialmente se o texto contiver várias linhas, é usar um documento aqui. Adicione essas linhas ao seu script, por exemplo, para criar um file.txt
com este texto:
cat << 'EOF' > file.txt
Here is some text
or other
EOF
(você pode usar qualquer coisa no lugar de EOF
acima como marcador de final de arquivo, desde que não ocorra no texto a ser inserido. O primeiro EOF
deve ser citado para evitar qualquer expansão dentro do arquivo aqui. documento).
Para arquivos com conteúdo arbitrário, você pode usar uudecode
. Também permite especificar as permissões para o arquivo que está sendo criado. Por exemplo, para um script criar um arquivo foo
com o conteúdo e permissões de /bin/ls
, faça:
(echo 'uudecode << "_EOF_"'
uuencode -m /bin/ls foo
echo _EOF_) >> your-script
Que adicionará o código correspondente ao seu script. Algo como:
uudecode << "_EOF_"
begin-base64 755 foo
f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAMFQAAAAAAABAAAAAAAAAADD3AQAA
[...]
AAAAAAAAAAAAAAA=
====
_EOF_
Com o conteúdo de /bin/ls
codificado em base64.
Isso assume que o uudecode
está disponível na máquina na qual você executará o comando. Mas geralmente deve ser o caso, pois uudecode
é um comando POSIX.
Você pode estender isso para criar vários arquivos codificando um arquivo tar compactado:
(echo 'uudecode << "_EOF_" | gunzip | tar xpf -'
tar cf - file1 file2 file3 dir/file4 | uuencode -m -
echo '_EOF_') >> your-script
(assumindo que o sistema de destino tem gunzip
e tar
(não comandos POSIX, mas bastante comuns)).
Isso também tem o benefício de permitir que você codifique metadados de arquivo adicionais, como propriedade ou tempo de acesso e modificação (e mais como ACLs e atributos estendidos e relação de link físico com algumas tar
implementações). Ele também permite que você crie facilmente arquivos não regulares, como diretórios, links simbólicos, dispositivos ...
Veja também o shar
utility que pode ajudá-lo a criar auto-portáteis arquivos extraíveis.