В tcl, как мне написать переменную, в которой я нахожусь? - PullRequest
0 голосов
/ 08 октября 2019

В оболочке tcl я хочу сохранить переменную, в которой я нахожусь. Этот скрипт также предназначен для запуска другими, и мне нужно проверить, в какой оболочке они находятся.

Я пытался использовать exec, но у меня возникают проблемы с сохранением результатов в переменной, которую я могу сравнить со строкойВ основном я хочу выяснить, находится ли пользователь в bash, csh или ksh. Пользователи переключаются между оболочками, поэтому необходимо определить активную оболочку, в которой они находятся. Я попытался:

set shell [exec echo \$0]
puts stdout "echo $shell;"

if { [string first "bash" $shell] != -1 } {
puts stdout "echo should be bash, is $shell;"
} elseif { [string first "ksh" $shell] != -1 } {      
puts stdout "echo should be KSH, is $shell;"
} else {
puts stdout "echo should be csh, is $shell;"
}

К сожалению, в оболочку записывается только строка $ 0, а не действительная оболочка. Есть ли другой способ сделать это? Для контекста, это для файла модуля в Linux, который позволяет мне (и другим) устанавливать подходящую среду для конкретного программного пакета.

modulefile имеет

set shell [shell-info-shell]

, но это не дает активную оболочку.

EDIT:

Чтобы уточнить, я хочу знать, в какой оболочке я нахожусь, чтобы я мог запускать

something.sh if I am in bash
something.ksh if I am in ksh
something.csh if I am in csh

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

Спасибо!

1 Ответ

1 голос
/ 08 октября 2019

Если вы хотите узнать значение переменной среды SHELL, Tcl предоставляет глобальный массив с именем env, который содержит среду, в которой была запущена оболочка Tcl. Попробуйте:

set myshell $::env(SHELL)

Вам нужно будет обработать случаи, когда SHELL не определена, но это другой вопрос.

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