Мне удалось заставить это работать, указав каталог после --filesystem=xdg-config
и включив параметры монтирования после этого. Я не уверен, нужны ли параметры монтирования, но попробуйте поместить их в этот раздел finish-args
манифеста вашего приложения.json.
"finish-args": [
"--filesystem=xdg-config/<config-dir>:create",
"--filesystem=xdg-cache/<cache-dir>:create",
"--filesystem=xdg-data/<data-dir>:create"
],
Предполагая, что текст нужно вставить только один раз , я бы, вероятно, не использовал здесь команду редактирования a
, а r
для чтения из файла:
cat <<END_CODE | sed '/pattern/r /dev/stdin' destination.sh
content=( line1:${1@Q} line2:${2@Q} )
for lines in "\${content[@]}"; do
echo print "\$lines"
done
# Above loop shorter: printf 'print %s\n' "\${content[@]}"
END_CODE
(Обратите внимание на исправленный код оболочки в текстовом блоке, предполагая, что $1
и $2
должны быть расширены во вставленном коде, а другие переменные не должны быть расширены до тех пор, пока вставленный код не будет запущен.)
Или, если вы хотите сохранить переменную var
:
printf '%s\n' "$var" | sed '/pattern/r /dev/stdin' destination.sh
Если вам нужно вставить код несколько раз, запишите текст в реальный файл и прочитайте этот файл с помощью r
таким же образом:
sed '/pattern/r mycode' destination.sh
Проблема с вашим кодом заключается в том, что вы пытаетесь вставить значение переменной в sed
код редактирования, который представляет собой строку с одинарными кавычками. Переменные не раскрываются внутри строк в одинарных кавычках. Вы можете переключиться на использование двойных кавычек, но тогда у вас возникнет проблема с тем, чтобы ваши вставленные данные не нарушали синтаксис вашего сценария редактирования (, например, если какая-либо строка, кроме последней, не заканчивается\
). Поэтому было бы безопаснее и удобнее использовать r
вместо a
.
Если вы используете macOS, обязательно обновите bash
исходную версию по умолчанию до более новой версии. Вы можете сделать это с помощью менеджера пакетов Homebrew . Также обратите внимание, что sed -i
работает в macOS иначе, чем, например, в macOS. Linux (см. Как добиться переносимости с помощью sed -i (в -место для редактирования )?).
Использование здесь -документа и временного файла:
cat > tmp.txt << EOF
content="
line1:'\$1'
line2:'\$2'
"
for lines in \${content[@]}
do
echo print \$lines
done
EOF
sed "/pattern/r tmp.txt" file
rm tmp.txt