Я пытаюсь сделать так, чтобы в файле (rc.xml) он заменял две строки (тему) и (этот материал) содержимым файла openbox-$1 ($1 — аргумент). В рамках sed sed абсолютно ничего не делает с аргументом и ничего не заменяется. Однако когда я заменяю $1 каким-то предопределенным значением, сценарий работает так, как задумано. Однако при этом происходит потеря пользовательского ввода, что полностью нарушает всю цель сценария (установить правильные настройки Openbox для пользователя).
Текущий сценарий:
(игнорируйте это)
(скрипт находится в стадии тестирования, поэтому он копирует новую копию файла, используемого вместо тестового файла, это также игнорируйте)
Код: Выделить всё
sed $'/ this stuff/ {r openbox-$1\n} ; /theme/,/ this stuff/ {d}' rc.xml > newfile
(предполагается, что вводимые пользователем данные принимаются как $1 и записываются содержимое файла openbox-$1 между двумя строками, перечисленными выше)
Измененная команда sed
Код: Выделить всё
sed $'/ this stuff/ {r openbox-500\n} ; /theme/,/ this stuff/ {d}' rc.xml > newfile
(работает по назначению, но копировать можно только файл openbox-500)
Я попытался убрать единичные кавычки из sed, но он сообщает об этом без кавычек:
Код: Выделить всё
sed: -e expression #1, char 2: unknown command: `/' ./replace.sh: line 3: /theme/,/: No such file or directory
С двойными кавычками:
Код: Выделить всё
sed: -e expression #1, char 0: unmatched `{'
Ожидается, что sed прочитает $1 в качестве аргумента вместо него (поэтому $1 будет равен 500, например, если пользователь вводит его), и он прочитает файл openbox-500 (просто в качестве примера). После этого сценарий (как упоминалось ранее) заменит все, что находится между двумя указанными строками (строки упоминаются ранее), и запишет измененный файл в новый файл.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ed-command