Tcl: получить стандартный вывод из exe c bash - PullRequest
0 голосов
/ 10 июля 2020

Внутри tcl sh я могу запустить следующее и получить ожидаемый результат:

% exec bash -c "ulimit -v"
50331648

Однако внутри сценария Tcl ничего не возвращается. Ни ошибки, ни вывода, ничего. Ясно, что есть некоторые проблемы с exe c 'ing' bash - c ', которые я не могу решить.

В качестве альтернативы, есть ли собственный способ в Tcl, который я могу получить системную память предел, чтобы избежать этого в первую очередь?

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

В сеансе интерактивный tcl sh REPL услужливо распечатывает вывод команд / выражений. В неинтерактивной программе это не так.

exec возвращает вывод команды: вам просто нужно захватить его с помощью обычной подстановки команды:

set output [exec bash -c "ulimit -v"]
puts $output
1 голос
/ 10 июля 2020

Код, который вы написали, должен работать; Я не могу определить, почему bash не запускает ulimit -v. Даже если бы сценарий выполнялся в среде, где это была привилегированная информация (почему !?), все равно можно было бы ожидать получить сообщение об ошибке той или иной формы. Это очень странная проблема!

Базовый набор команд Tcl не предоставляет никакого доступа к ограничениям памяти ни для чтения, ни для записи. Самый простой обходной путь, который не вызывает внешнюю программу, - это пакет tclbsd (очевидно, он в основном работает и в большинстве других Unix), который предоставляет команду, которая должна помочь:

package require BSD

set limit [bsd::rlimit get soft virtual]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...