Вызов bash-скрипта из tcl-скрипта, возврат и выход из состояния - PullRequest
6 голосов
/ 24 августа 2011

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

Ответы [ 3 ]

10 голосов
/ 24 августа 2011

См. 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 ...
1 голос
/ 24 августа 2011

Мой опыт в 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

1 голос
/ 24 августа 2011

То, что вы хотите, это exec , результат которого будет в возвращаемом значении, будьте предупреждены, однако есть много ошибок, использующих exec, особенно если вам нужно сделать какое-либо сложное цитирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...