Як я можу автоматично записувати дані в текстовий файл за допомогою сценаріїв оболонки в Linux?
Я зміг відкрити файл. Однак, я не знаю, як писати дані на нього.
Відповіді:
219 для відповіді № 1echo "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