2010-06-02 1 views
0

У меня есть скрипт, который вызывает:Есть ли способ передать параметры сценарию в TCL, который запускается с использованием источника eval?

eval source \{$scriptfile\} 

где $ файл_сценария еще один сценарий TCL. Есть ли способ передать параметры сценарию? Я хотел бы сделать что-то вроде:

set sampleData "ID=14678934" 
eval source \{$scriptfile\} $sampleData 

Я знаю, что это не разрешено, но есть способ, чтобы передать данные в скрипт, который выполняется с помощью Eval источника?

+0

Нет причин использовать 'eval', и это ужасная идея. –

+0

Да, согласен. К сожалению, у меня не было контроля над существующей базой кода. Это было написано 10 лет назад, и я пытаюсь внести некоторые незначительные изменения в него, пока не смогу заменить его прямо. – Corv1nus

ответ

5

Это ужасная практика для начала. Гораздо чище вызывать proc, который находится внутри скрипта, который вы используете.

source script.tcl ;# defines proc run_script_with_data 
run_script_with_data $data 
+0

Это интересный подход, спасибо. – Corv1nus

+0

Другой вопрос. Это выполняется с использованием интерпретационного источника. Вы знаете, как получить доступ к данным в сценарии, запущенном в другом интерпретаторе? Приносим извинения за вопросы о нобе, но, к сожалению, я новичок в TCL. – Corv1nus

+0

@ Corv1nus Вы имеете в виду раб-интерпретатор? (как в, созданный командой Tcl 'interp') Или один в другом процессе? –

3

Раствор дается в Tclers Wiki в следующих статьях: source with args и SrcFile.

Решение, которое я люблю больше всего srcfile:

proc srcfile { filename args } { 
    global argv 

    set argv $args 
    source $filename 
} 

Единственный недостаток этого подхода заключается в том, что он будет изменять argv, так что вы должны убедиться, что вы не будете нуждаться в этом в остальной части скрипта , или резервного копирования и восстановления.

+0

Спасибо, ты рок :) – Corv1nus

 Смежные вопросы

  • Нет связанных вопросов^_^