У меня есть test.tcl (имеет все разрешения), который содержит следующие

#!/usr/bin/tclsh    
puts "hello, world"

Вот как я выполняю свой tcl-скрипт

sudo source /opt/test.tcl

Я получил выход-

sudo: source: command not found

Но я проверил доступность source и sudo с помощью команды whereis и они были доступны.

$ whereis sudo
sudo: /usr/bin/sudo /usr/share/man/man8/sudo.8.gz
$ whereis source
source: /usr/share/man/man1/source.1.gz

Однако, когда я пытаюсь выполнить tcl как

sudo tclsh /opt/test.tcl

Я получаю ожидаемый результат-

hello, world

Я что-то здесь упускаю?

1 ответ1

1

source - встроенная оболочка. Ваша оболочка не может найти source по той же причине, по которой она не может найти cd когда вы используете sudo - это не команда. Вы можете использовать встроенный type оболочки, чтобы проверить это самостоятельно.

source выполняет содержимое файла, который вы указываете в вашей текущей оболочке. Это должно быть хорошо, если вам не нужна интерактивная оболочка и ваша текущая оболочка - tclsh. Читайте здесь для получения дополнительной информации.

sudo tclsh /opt/test.tcl

будет работать, но он будет работать в неинтерактивной оболочке.

Если вам по какой-либо причине требуется source текст сценария, решите, нужны ли вам специальные разрешения или нет. Если необходимо, вы можете выполнить su для получения root-прав и получения source скрипта.

Кроме того, вы получили результат для $ whereis source

source: /usr/share/man/man1/source.1.gz

кажется , быть man страница. Так что это, вероятно, не будет много пользы!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .