Відповіді:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/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
Ви можете перенаправити вихід команди в файл:
$ cat file > copy_file
або додати до нього
$ cat file >> copy_file
Якщо ви хочете записати безпосередньо команда є echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'(завдяки коментарю lukaserat вище)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txtтоді натисніть ctrl + D, коли закінчите .
Я знаю, це прокляте старе питання, але оскільки ОП стосується сценаріїв, а також про те, що 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
Цей приклад призводить до того, що файл 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, ви все одно повинні використовувати іншу мову :)
У будь-якому випадку, fd's можна використовувати в багатьох цікавих способах.
Мені подобається ця відповідь:
cat > FILE.txt <<EOF
info code info
...
EOF
але радимо, cat >> FILE.txt << EOFякщо ви хочете просто додати щось до кінця файлу, не витираючи те, що вже існує
Подобається це:
cat >> FILE.txt <<EOF
info code info
...
EOF
Переміщуючи мій коментар як відповідь, на запит @lycono
Якщо вам потрібно зробити це з привілеями root, зробіть це так:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/nullзапустити лише teeroot.
У середовищах, де тут недоступні документи ( 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
Я подумав, що є кілька ідеально точних відповідей, але немає стислого резюме всіх можливостей; таким чином:
Основним принципом більшості відповідей тут є перенаправлення . Два важливі оператори перенаправлення для запису у файли:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
Інші згадані, а не з фіксованого джерела введення, як-от echo 'text', ви також можете інтерактивно записувати у файли через "Тут документ", який також детально описаний у посиланні на посібник з bash вище. Ці відповіді, наприклад
cat > FILE.txt <<EOF або cat >> FILE.txt <<EOF
скористайтеся тими ж операторами переадресації, але додайте ще один шар через "Тут документи". У наведеному вище синтаксисі ви пишете у FILE.txt за допомогою виводуcat . Запис відбувається лише після того, як інтерактивному вводу буде надано якусь конкретну рядок, у цьому випадку 'EOF', але це може бути будь-який рядок, наприклад:
cat > FILE.txt <<'StopEverything' або cat >> FILE.txt <<'StopEverything'
працювало б так само добре. Тут Документи також шукають різні роздільники та інші цікаві символи для розбору, тому перегляньте документи для отримання додаткової інформації про це.
Трохи перекрученість і більше вправа розуміння перенаправлення та синтаксису Here Documents, але ви можете комбінувати синтаксис стилю Here Document із стандартними операторами переадресації, щоб стати рядом Here:
Перенаправлення виводу котуcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Тут також можна використовувати документ та 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