2016-01-24 6 views
0

У меня есть сценарий, который обрабатывает файл конфигурации для запуска задания рендеринга. Мне нравится запускать их на экранах.Один лайнер для создания нескольких экранов

Проблема в том, что я не могу назвать экраны, что приводит к их запутыванию, если мне нужно увидеть статус.

Это работает, работает 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' 

Есть ли способ сделать это исправленным?

ответ

1

Вы не можете использовать обратные пути таким образом, так как эта команда будет выполнена мгновенно, прежде чем запускать программу find. Если вы не хотите писать какой-либо «вспомогательный» скрипт, вы можете попробовать вставить всю команду в дополнительную оболочку:

find assets -name 'job?_config.py' -exec sh -c "screen -dmS `sed 's/.*\(job[[:digit:]]\).*/\1/' <<< '{}'`" \; 
+1

Никогда не вставляйте '{}' в строку, переданную в 'sh -c'. Это небезопасно. Вместо этого используйте команду 'sh -c '' - {}', а затем используйте '$ 1' в скрипте для ссылки на аргумент. Это также позволяет использовать расширение параметра и т. Д. Вместо значения внешних инструментов (если это работает). –

+0

Под «небезопасным» вы подразумеваете, что если было плохое имя каталога (rm -rf /), оно просто запускало бы и уничтожало бы все, не так ли? Или есть другие проблемы, которые его запускают? В целом структура каталогов довольно последовательна, но я считаю, что важно принять все меры предосторожности, которые я могу! – Paka

Смежные вопросы