Como colocar o comando EOF na mesma linha para a execução dos vários comandos do shell

1

Eu queria executar o seguinte comando no cron job (semelhante a este) O trabalho Cron não aceita esse padrão de comandos. nem eu sou incapaz de rodar na mesma linha do shell.

cat > file << EOF
first line
second line
third line
EOF

deixe-me saber se existe uma maneira de executar isso na linha única.

Eu também tentei com quebra de linha no final de cada linha sem sorte.

    
por pari 06.03.2017 / 03:45

2 respostas

2

Esta não é a única maneira de colocar texto em um arquivo. Você poderia fazer:

$ printf '%s\n' 'first line' 'second line' 'third line' > file

Depois disso, file contém:

first line
second line
third line

Existem limites no número e no comprimento de strings que você pode fornecer como argumentos para qualquer comando. Isso não deve ser um problema no Linux, já que esses limites tendem a ser enormes, mas outros sistemas Unix ou ambientes incorporados podem ser menos tolerantes.

    
por 06.03.2017 / 03:57
0

Você pode usar $'\n' no bash para representar uma nova linha

Por exemplo, você pode usar:

bash -c "cat <<< first\ line$'\n'second\ line$'\n'third\ line > file"

no seu cron.

Da página man do bash:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:

\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\ backslash
\' single quote
\" double quote
\? question mark
\nnn the eight-bit character whose value is the octal value nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
\cx a control-x character

    
por 06.03.2017 / 04:06