Вызов bash-скрипт из скрипта TCL и возвращение и состояние выхода
Я пытаюсь вызвать сценарий bash из сценария TCL и должен получить статус выхода из сценария bash или, по крайней мере, передать что-то обратно в сценарий TCL, чтобы я мог сказать, успешно ли мой сценарий выполнен. Есть предложения?
3 ответов:
См. http://wiki.tcl.tk/exec - Нажмите кнопку "Показать обсуждение" - есть очень подробный пример того, как сделать именно то, что вы просите. Что вам нужно, так это
catchset status [catch {exec script.bash} output] if {$status == 0} { puts "script exited normally (exit status 0) and wrote nothing to stderr" } elseif {$::errorCode eq "NONE"} { puts "script exited normally (exit status 0) but wrote something to stderr which is in $output" } elseif {[lindex $::errorCode 0] eq "CHILDSTATUS"} { puts "script exited with status [lindex $::errorCode end]." } else ...
То, что вы хотите, это exec результат которого будет в возвращаемом значении, будьте осторожны, однако есть много gotchas, использующих exec, особенно если вам нужно сделать любое сложное цитирование
Мой опыт работы в tcl ограничивается случайными баловствами. Однако следующие ссылки, начинающиеся с ответа @jk, привели меня к этой странице, где обсуждается переменная errorCode и связанные с ней вещи, которые могут быть полезны в этом случае. Вот краткий пример, демонстрирующий использование errorCode:
Tcl:
set ret_val [catch { exec /bin/bash /path/to/bash_script }] set errc $errorCode set ret_val [lindex [split $errc " " ] 2] puts $ret_valBash_script, как указано выше:
#!/bin/bash exit 42, что привело к выходу:
42
Comments