sudo: source: command not found when executing tcl as sudo

I have a test.tcl (has all permissions) which contains the following-

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

This is how I'm executing my tcl script-

sudo source /opt/test.tcl

I got the output-

sudo: source: command not found

But I checked the availability of source and sudo using whereis command and they were available-

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

However, when I attempt to execute tcl as-

sudo tclsh /opt/test.tcl

I get the expected output-

hello, world

Am I missing something here?

1 Answer

source is a shell builtin. Your shell cannot find source for the same reason it can't find cd when you're using sudo - it is not a command. You can use the shell builtin type to check this yourself.

source executes the content of a file you specify in your current shell. That should be fine as long as you don't need an interactive shell, and that your current shell is tclsh. Read here for more information.

sudo tclsh /opt/test.tcl

will work, but it will run in a non-interactive shell.

If you do need to source the script for some reason, decide whether you need to do special permissions or not. If you must, you can su to root and source the script from there.

Also, the output you got for $ whereis source

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

seems to be a man page. So that probably wasn't going to be much use!

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like