Вызов bash-скрипт из скрипта TCL и возвращение и состояние выхода



Я пытаюсь вызвать сценарий bash из сценария TCL и должен получить статус выхода из сценария bash или, по крайней мере, передать что-то обратно в сценарий TCL, чтобы я мог сказать, успешно ли мой сценарий выполнен. Есть предложения?

616   3  

3 ответов:

См. http://wiki.tcl.tk/exec - Нажмите кнопку "Показать обсуждение" - есть очень подробный пример того, как сделать именно то, что вы просите. Что вам нужно, так это catch

set 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_val

Bash_script, как указано выше:

#!/bin/bash
exit 42

, что привело к выходу:

42

Comments

    Ничего не найдено.