Я чувствую себя неправильным, отвечая на этот вопрос, но вот вам:
Суть в том, что Makefile - правильный инструмент для этой работы, и вы можете уйти от экранирования оболочки с помощью здесь строковый синтаксис.
# some script...
xargs -0 python -c <<'PYTHON_SCRIPT_asdlfkjhsldjkhf'
PYTHON_SCRIPT_asdlfkjhsldjkhf
# more script ...
merged_script.sh: base_script.sh python_script.py
{ sed -ne '0,/PYTHON_SCRIPT_/p' base_script.sh; \
sed -e SOME_REGEX_TO_STRIP_COMMENTS python_script.py; \
sed -ne '/^PYTHON_SCRIPT_/,999999999p' base_script.sh; \
} > merged_script.sh
В основном это захватывает верхнюю половину сценария оболочки, затем соединяет сценарий python, а затем прикрепляет нижнюю половину сценария. Скрипт python помещается в строку здесь, поэтому вам не нужно беспокоиться об экранировании оболочки.Вам нужно убедиться, что строка не встречается в коде Python, но это не должно быть настоящей проблемой. Вы также должны сделать скрипт python короче, чем максимальное количество аргументов, но эта проблема у вас уже была.
Написание регулярного выражения для удаления комментариев Python оставлено в качестве упражнения.
Команды sed для захвата верхней и нижней половины скрипта неаккуратны, и их можно заменить какой-нибудь другой утилитой скрипта для объединения файлов. Я бы посоветовал написать это на python, так как это то, что вам удобно.
Наконец-то я нашел решение:https://steamcommunity.com/app/93200/discussions/0/864959809826195633/
Кажется, что некоторые приложения используют что-то под названием OpenALsoft для управления звуком, и у него есть параметр конфигурации, который запрещает изменения приемника. Чтобы отключить эту опцию, вы можете создать файл конфигурации.
~/.alsoftrc
[pulse]
allow-moves=yes
В моей системе также требовалась строка «драйверы».
~/.alsoftrc
drivers = alsa,pulse,core,oss
[pulse]
allow-moves=yes