Открыть и записать данные в текстовый файл, используя Bash?

Как я могу автоматически записывать данные в текстовый файл с помощью сценариев оболочки в Linux?

Мне удалось открыть файл. Однако я не знаю, как писать данные.

Ответ 1

echo "some data for the file" >> fileName

Ответ 2

#!/bin/sh

FILE="/path/to/file"

/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
 EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4 
EOM

Ответ 3

Вы можете перенаправить вывод команды в файл:

$ cat file > copy_file

или добавить к нему

$ cat file >> copy_file

Если вы хотите написать напрямую, команда echo 'text'

$ echo 'Hello World' > file

Ответ 4

#!/bin/bash

cat > FILE.txt <<EOF

info code info 
info code info
info code info

EOF 

Ответ 5

Я знаю, что это чертовски старый вопрос, но поскольку OP - это сценарий, а также тот факт, что google привел меня сюда, также следует упомянуть об открытии дескрипторов файлов для чтения и записи.

#!/bin/bash

# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt

    # Let print some text to fd 3
    echo "Roses are red" >&3
    echo "Violets are blue" >&3
    echo "Poems are cute" >&3
    echo "And so are you" >&3

# Close fd 3
exec 3>&-

Затем cat файл на терминале

$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you

Этот пример заставляет файл poem.txt быть открытым для чтения и записи в дескрипторе файла 3. Он также показывает, что * nix-боксы знают больше fd, а затем только stdin, stdout и stderr (fd 0,1,2). На самом деле это много. Обычно максимальное количество файловых дескрипторов, которые может выделять ядро, можно найти в /proc/sys/file-max или /proc/sys/fs/file-max, но использование любого fd выше 9 является опасным, так как оно может конфликтовать с fd, используемым оболочкой внутри. Поэтому не беспокойтесь и используйте только fd 0-9. Если вам нужно больше 9 файловых дескрипторов в bash script, вы должны использовать другой язык:)

Во всяком случае, fd можно использовать несколькими интересными способами.

Ответ 6

Мне нравится этот ответ:

cat > FILE.txt <<EOF

info code info 
...
EOF

но предложит cat >> FILE.txt << EOF, если вы хотите просто добавить что-то в конец файла, не уничтожая то, что уже существует

Вот так:

cat >> FILE.txt <<EOF

info code info 
...
EOF

Ответ 7

Перемещение моего комментария как ответа, по просьбе @lycono

Если вам нужно сделать это с привилегиями root, сделайте это следующим образом:

sudo sh -c 'echo "some data for the file" >> fileName'

Ответ 8

В средах, где документы здесь недоступны (Makefile, Dockerfile и т.д.), Вы часто можете использовать printf для достаточно удобочитаемого и эффективного решения.

printf '%s\n' '#!/bin/sh' '# Second line' \
    '# Third line' \
    '# Conveniently mix single and double quotes, too' \
    "# Generated $(date)" \
    '# ^ the date command executes when the file is generated' \
    'for file in *; do' \
    '    echo "Found $file"' \
    'done' >outputfile

Ответ 9

Также можно использовать здесь document и vi, скрипт ниже генерирует FILE.txt с 3 строками и переменной интерполяцией

VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX

Тогда файл будет иметь 3 строки, как показано ниже. "i" - запустить режим вставки vi и аналогичным образом закрыть файл с помощью Esc и ZZ.

#This is my var in text file
var = Test
#Thats end of text file