/ / Відкривати та записувати дані в текстовий файл за допомогою сценаріїв bash / shell - bash, shell

Відкрийте та записуйте дані в текстовий файл за допомогою сценаріїв bash / shell - bash, shell

Як я можу автоматично записувати дані в текстовий файл за допомогою сценаріїв оболонки в Linux?

Я зміг відкрити файл. Однак, я не знаю, як писати дані на нього.

Відповіді:

219 для відповіді № 1
echo "some data for the file" >> fileName

99 за відповідь № 2
#!/bin/sh

FILE="/path/to/file"

/bin/cat <<EOM >$FILE
text1
text2
text3
text4
EOM

40 для відповіді № 3

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

$ cat file > copy_file

або додати до нього

$ cat file >> copy_file

Якщо ви хочете написати безпосередньо, команда є echo "text"

$ echo "Hello World" > file

25 за відповідь № 4
#!/bin/bash

cat > FILE.txt <<EOF

info code info
info code info
info code info

EOF

13 за відповідь № 5

Я знаю це прокляте старе питання, але як OPце про сценарії, а також те, що Google приніс мені тут, також слід згадати відкриття дескрипторів файлів для читання та письма одночасно.

#!/bin/bash

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

# Let"s 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

Цей приклад викликає файл вірша.txt, щоб бути відкритим для читання та запису на дескрипторі файлу 3. Він також показує, що * коробки nix знають більше fd, а потім просто stdin, stdout і stderr (fd 0,1,2). Це насправді тримає багато. Кількість файлів-дескрипторів, які може виділити ядро, можна знайти в /proc/sys/file-max або /proc/sys/fs/file-max але використання будь-якого FD вище 9 є небезпечним, як це могло бконфліктуйте з федерацією, що використовується оболонкою всередині. Отже, не турбуйтесь і використовуйте тільки fd "0-9. Якщо вам потрібно більше 9 дескрипторів файлів у скрипті bash, вам слід використовувати будь-яку іншу мову :)

Так чи інакше, fd "s можна використовувати в безлічі цікавих способів.


9 для відповіді № 6

Мені подобається ця відповідь:

cat > FILE.txt <<EOF

info code info
...
EOF

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

Подобається це:

cat >> FILE.txt <<EOF

info code info
...
EOF

5 за відповідь № 7

Перемістити мій коментар у відповідь, як це вимагає @lycono

Якщо вам потрібно це зробити з кореневими правами, виконайте це таким чином:

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

2 для відповіді № 8

Для середовищ, де документи тут недоступні (Makefile, Dockerfileі т. д.), які ви часто можете використовувати printf для розумного розбірливого та ефективного рішення.

printf "%sn" "#!/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