Есть ли способ получения csh-файла в сценарии tcl и переноса переменных в основную оболочку? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь получить файл some.cshrc во время выполнения сценария TCL.Я не получаю ошибки, но переменные, заданные в some.cshrc, не передаются обратно в оболочку.

При записи этого типа: source some.cshrc Я получаю ошибку.Затем я попытался: exec / bin / csh -c "source some.cshrc"

Пожалуйста, сообщите

1 Ответ

1 голос
/ 30 апреля 2019

Поскольку Csh и Tcl - два совершенно разных языка, вы не можете просто загрузить файл Csh в сценарий Tcl с помощью команды source.

Вместо этого вы можете придумать обходной путь. Предположим, вы хотите загрузить все переменные, установленные с помощью команды setenv. Пример содержимого файла some.cshrc может выглядеть примерно так:

setenv EDITOR vim
setenv TIME_STYLE long-iso
setenv TZ /usr/share/zoneinfo/Europe/Warsaw

Вы можете написать скрипт Tcl, который будет построчно читать этот файл и искать команды setenv. Затем вы можете переосмыслить строку как список и установить соответствующую переменную в глобальном пространстве имен с помощью команды upvar.

#!/usr/bin/tclsh

proc load_cshrc {file_name} {
  set f [open $file_name r]
  while {[gets $f l] >= 0} {
    if {[llength $l] == 3 && [lindex $l 0] eq "setenv"} {
      upvar [lindex $l 1] [lindex $l 1]
      set [lindex $l 1] [lindex $l 2]
    }
  }
  close $f
}

load_cshrc "some.cshrc"
puts "EDITOR = $EDITOR"
puts "TIME_STYLE = $TIME_STYLE"
puts "TZ = $TZ"

Обратите внимание, что, поскольку мы не запускаем подоболочку Csh, никаких подстановок переменных в сценарии Csh не произойдет.

...