Скрипт Tcl не может быть выполнен из скрипта оболочки bash - PullRequest
1 голос
/ 21 октября 2011

У меня относительно странная проблема со сценариями оболочки bash и сценариями tcl, вызываемыми из сценариев оболочки.

В перспективе у меня есть сценарий оболочки, который генерирует некоторые другие сценарии оболочки, а также сценарии tcl,Некоторые из сгенерированных сценариев оболочки вызывают сценарии tcl с помощью команды tclsh.Файлы создаются и хранятся в каталоге, также создаваемом исходными сценариями оболочки, который генерирует файлы и папки, в которых они должны храниться.

Проблема заключается в созданных сценариях оболочки, которые вызывают tclsh.запустить скрипт tcl.Даже если файлы сгенерированы и сценарии оболочки имеют разрешения на выполнение, ответ от оболочки заключается в том, что файл tcl, встроенный в сценарий оболочки, не может быть найден.

Однако файл существует, и я могу открыть его как на платформах vi, так и на gedit, RHEL 9.0 или Centos 5.7.Но когда я вынимаю тот же сценарий оболочки из созданного каталога, эта ошибка не появляется.Можете ли вы предложить какие-либо идеи?Я также проверил права доступа к каталогам, но они, кажется, в порядке.Я также проверил скрипт оболочки на наличие дополнительных символов, но ничего не нашел.

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Трудно сказать, что именно не так из вашего описания; Вы пропускаете всю информацию, фактически необходимую для точной диагностики проблемы. Однако ...

У вас есть tclsh в вашей переменной PATH, но ваш скрипт не работает, несмотря на то, что chmodded является исполняемым? Это означает, что есть проблема с вашей #! строкой. В настоящее время рекомендуется использовать что-то вроде этого:

#!/usr/bin/env tclsh

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

Другая вещь, которая может вызывать проблему, если ваша программа Tcl содержит:

package require Tcl 8.5

И все же версия Tcl, используемая tclsh на пути, - 8.4. Я видел это несколько раз, и если это ваша проблема, вам нужно убедиться, что установлены правильные значения скорости вращения Tcl и , чтобы обновить строку #! до следующего:

#!/usr/bin/env tclsh8.5

Аналогично для Tcl 8.6, но в этом случае вам может также понадобится создать свой собственный из исходного кода и установить его в подходящем месте. (Tcl 8.6 все еще действительно только для людей, которые являются специалистами.)


(Проблема в том, что RHEL - и Centos, который отслеживает RHEL - очень консервативны, когда дело доходит до Tcl. Хотя причины этого на самом деле не имеют отношения к этому ответу.)

0 голосов
/ 21 октября 2011

Может ли проблема быть столь же простой, как тот факт, что у вас нет "."в вашем ПУТИ?Что если вместо того, чтобы называть ваш скрипт как «myscript.tcl», вы называете его «./myscript.tcl» или «/absolute/path/to/myscript.tcl"?

...