Criar, gravar e salvar arquivo de um script do Shell

10

Como não quero escrever o arquivo manualmente, criei um shell-script. Existe uma maneira de escrever e salvar o arquivo automaticamente sem que o usuário pressione as teclas?

sudo nano blah
#write stuff to file
#save file
#continue

^ Isso estará dentro de um arquivo * .sh

Ou existe outra maneira de criar um arquivo de texto simples em um script?

Zarkopafilis
fonte
11
Eu suspeito que você está fazendo a pergunta errada aqui. Existem maneiras muito mais simples de gravar em um arquivo de maneira programática do que tentar controlar um editor como o nano. Diga-nos o que você deseja fazer com o arquivo.
Warren Hill
Eu só quero criá-lo e escrever um monte de linhas.
Zarkopafilis
Você está pedindo uma solução, como o Autoit for Windows, que pode automatizar programas GUI entre outras coisas ou como poder escrever texto em um shell script, por exemplo $echo "Some text" > afile.txt?
Stef K
@Zarkopafilis - editei sua pergunta para deixar mais claro o que você quer dizer. Se eu o entendi errado, você sempre pode revertê-lo. Também publiquei uma resposta para você.
Warren Hill

Respostas:

14

Para seqüências de comandos mais complexas, considere usar o catcomando com um documento aqui . O formato básico é

command > file << END_TEXT
some text here
more text here
END_TEXT

Existem dois comportamentos sutilmente diferentes, dependendo se o rótulo END_TEXT está entre aspas ou não:

  1. rótulo não citado : o conteúdo é escrito após as expansões usuais do shell

  2. etiqueta entre aspas : o conteúdo do documento aqui é tratado literalmente, sem as expansões usuais do shell

Por exemplo, considere o seguinte script

#!/bin/bash

var1="VALUE 1"
var2="VALUE 2"

cat > file1 << EOF1
do some commands on "$var1" 
and/or "$var2"
EOF1

cat > file2 << "EOF2"
do some commands on "$var1" 
and/or "$var2"
EOF2

Os resultados são

$ cat file1
do some commands on "VALUE 1" 
and/or "VALUE 2"

e

$ cat file2
do some commands on "$var1" 
and/or "$var2"

Se você estiver produzindo comandos shell a partir do seu script, provavelmente desejará o formulário entre aspas.

chave de aço
fonte
Cara, quanto tempo eu procurei por essa questão ^^: isso funciona apenas em script ou é possível também usá-lo diretamente no shell?
DerHugo 19/10/19
@derHugo você pode usá-lo diretamente no shell - nesse caso, seria mais comum omitir o END_TEXTe simplesmente usar CTRL-Dpara sinalizar o final da entrada. Ver, por exemplo Como sinalizar o fim da stdin de entrada
steeldriver
7

Não há necessidade de mexer com um editor para fazer isso.

Você pode acrescentar algo a um arquivo com um simples comando de eco. Por exemplo

echo "Hello World" >> txt

Anexará "Olá, mundo" ao arquivo txt. se o arquivo não existir, ele será criado.

Ou se o arquivo já existir e você deseja substituí-lo

echo "Hello World" > txt

Para a primeira linha: e

echo "I'm feeling good" >> txt
echo "how are you" >> txt 

Para linhas subseqüentes.

No mais simples, o .shscript poderia conter apenas um conjunto de comandos de eco.

Warren Hill
fonte