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

-1
26.03.2018, 10:46
2 ответа

Это можно сделать с помощью catи здесь -документа:

cat >outfilename <<END_FILE
this is the contents of the file

       la-di-da!

END_FILE

Документ здесь -находится между <<END_FILEи соответствующим END_FILEв конце. Окончание END_FILEдолжно быть единственным словом в этой строке и должно располагаться в начале строки. Слово END_FILEможет быть любым словом (, например. END_CONFIG_FILEили WHEN_WILL_SUMMER_COMEили что-то другое, имеющее смысл ).

Переменные будут развернуты в документе. Если это не нужно, то цитируйте первый здесь -разделитель документа:

cat >outputfilename <<'MY_DOC'
another here document thingy

     The $PATH variable will not be expanded here
MY_DOC

Документ здесь -технически является перенаправлением , и в приведенных выше примерах мы перенаправляем его в команду cat. Команда catпередает его в указанный файл, используя стандартное перенаправление вывода.

См. также вопросы с тегом на этом сайте.


Из комментариев :"Я получаю Отказано в доступе и sudoне помогает"

Да, если у вас нет прав на запись в каталог, вы не сможете перенаправить в выходной файл. Кроме того, создание выходного файла происходит еще до вызова sudo.поэтому использование sudoне поможет.

Вы могли бы сделать

sudo tee outputfilename >/dev/null <<MY_DOC
contents of file
goes here
MY_DOC

Это запустит teeкак root, а teeсоздаст outputfilenameв текущем каталоге (как root ). Перенаправление на /dev/nullдолжно остановить teeот вывода документа на терминал.

Команда teeкопирует свой ввод во все файлы, указанные в ее командной строке, и в стандартный вывод (терминала, если он не передан другой команде ).

3
28.01.2020, 05:07

Для произвольного (не обязательно текстового )контента можно использоватьuudecode:

uudecode << "EOF" | gunzip > some-file
begin 644 -
M'XL(``S*N%H``ZMW]7%C8F1D@`%F!CL&$.]"&(3O`!7W8&>"JW%@L&#@!)*R
M##(,;$`^*Y(Z=/H'(RK-`;>'@8$%B"V@QJ+3,@RH-",2S<J`&[QXPHA",S`H
MP/6!W#KA,T1\PF=%%+I""**Z0)4!11\35-^-OQ!]-_XJHM`?H-9\0/,?"Q2'
M0/V#3KLPH-(L4#K@:4D*B+U@/<1`=+H%:@&,AND+!.ICPP@-W$``2@=![<,5
M+@4\#"@T+%3U<S*3S$ST<U)T<S+S2BMT*RS,=,U,](KS]8S`;A*`JG7W"P6K
MAX6C`M3-(@R0-`"25^T\MOA2RP9MCB/-5_Z?6'QD>\KV8D&@7`54'SL0+UOH
MP2'$N$Y>XXJ`\`H6A@D@N4H@K@+B&B"N`^(&(&X$XF8@;H6ZLQV(.Y'\W06E
MNX%X;T#9O->7W_,9'?DNM+/W(]^T!9W3;Q9&R.QZ/*GFO$YRT>09-FNW_6)\
M[=_WM][)]>H;RT_=,CYV2[F?)CE^9;*KC]Z\Z+M0?=:LTM[C#Q(T97MD&/``
C?Z"GA;"('V?"+OX1A[@'(W;Q<&;LXINAY@``J665NN@#````
`
end
EOF

Где вывод (в образце над первыми 1000 байтами /bin/lsв моей системе )генерируется с помощью gzip < file | uuencode -.

1
28.01.2020, 05:07

Теги

Похожие вопросы