Согласно документации execute_process
может принимать более одной команды, и AFAIR они будут выполняться параллельно, поэтому запуск нескольких execute_process
менее желателен. Каждая команда должна быть создана во время выполнения путем перебора списка. Проблема в том, что execute_process
не может принять строку, содержащую токен COMMAND
и команду с аргументами, подобными приведенным ниже, и execute_process
не поддерживает команду сцепления с помощью &&
:
set(commands)
foreach (Node ${NodeList})
string(REGEX MATCHALL "[A-Za-z0-9_\\.]+" NodeDefinition "${Node}")
list(GET NodeDefinition 1 IP)
list(APPEND commands "COMMAND ssh -tt user@${IP} \"${command}\"")
endforeach ()
list(JOIN commands "\n" exec_commands)
message(STATUS "Commands: ${exec_commands}")
execute_process(${commands})
.
execute_process с неизвестным аргументом "COMMAND ssh -tt user@127.0.0.1" ls / bin ""
Есть ли способ обойти проблему?
EDIT001: похоже, что execute_process
будет работать, если я сделаю это следующим образом:
execute_process(COMMAND ${command1}
COMMAND ${command2}
...
COMMAND ${commandn}
)
Похоже, macro
решит эту проблему
EDIT002: Ну, это не так
EDIT003: Согласно комментарию @ Цыварева, мне не нужно создавать строковые команды, просто добавьте все в список, а также пропустите двойные кавычки команды. Рабочий код выглядит как
foreach (Node ${NodeList})
string(REGEX MATCHALL "[A-Za-z0-9_\\.]+" NodeDefinition "${Node}")
list(GET NodeDefinition 0 Name)
list(GET NodeDefinition 1 IP)
string(SUBSTRING ${Name} 0 8 starts_with)
if (starts_with STREQUAL "ch_node_")
list(APPEND commands COMMAND ssh -tt user@${IP} ${command})
endif ()
endforeach ()
execute_process(${commands})