У меня есть сценарий, который обрабатывает файл конфигурации для запуска задания рендеринга. Мне нравится запускать их на экранах.Один лайнер для создания нескольких экранов
Проблема в том, что я не могу назвать экраны, что приводит к их запутыванию, если мне нужно увидеть статус.
Это работает, работает assets/job1_config.py
, assets/job2_config.py
, и т.д.
find assets -name 'job?_config.py' -exec screen -dm python3 procJobs.py {} \;
Я пытался это сделать, но он не работает, так как он, кажется, возвращает имя каталога, что приводит к сообщению об ошибке: " не удается идентифицировать счета 'активы'.
find assets -name 'job?_config.py' -exec screen -dmS `sed 's/.*\(job[[:digit:]]\).*/\1/' <<< '{}'` \;
СЭД работает правильно, когда непосредственно передается строка.
sed 's/.*\(job[[:digit:]]\).*/\1/' <<< 'assets/job1_config.py'
Есть ли способ сделать это исправленным?
Никогда не вставляйте '{}' в строку, переданную в 'sh -c'. Это небезопасно. Вместо этого используйте команду 'sh -c '' - {}', а затем используйте '$ 1' в скрипте для ссылки на аргумент. Это также позволяет использовать расширение параметра и т. Д. Вместо значения внешних инструментов (если это работает). –
Под «небезопасным» вы подразумеваете, что если было плохое имя каталога (rm -rf /), оно просто запускало бы и уничтожало бы все, не так ли? Или есть другие проблемы, которые его запускают? В целом структура каталогов довольно последовательна, но я считаю, что важно принять все меры предосторожности, которые я могу! – Paka