как вставить текст переменной, которая принимает параметры cli, после определенной строки в файле?

Мне удалось заставить это работать, указав каталог после --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"
],
0
09.03.2021, 09:38
2 ответа

Предполагая, что текст нужно вставить только один раз , я бы, вероятно, не использовал здесь команду редактирования 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 (в -место для редактирования )?).

2
18.03.2021, 22:26

Использование здесь -документа и временного файла:

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
0
18.03.2021, 22:26

Теги

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