我有一个 test.tcl(具有所有权限),其中包含以下内容-
#!/usr/bin/tclsh
puts "hello, world"
这就是我执行 tcl 脚本的方式-
sudo source /opt/test.tcl
我得到的输出是-
sudo: source: command not found
但是我使用命令检查了源和 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
source
是 shell 内置命令。shell 找不到它的原因与使用 sudo 时source
找不到它的原因相同- 它不是一个命令。您可以使用 shell 内置命令自行检查。cd
type
source
执行指定文件的内容在你当前的 shell 中。只要您不需要交互式 shell,并且您当前的 shell 是 tclsh,那就没问题了。阅读这里了解更多信息。
sudo tclsh /opt/test.tcl
可以工作,但是它将在非交互式 shell 中运行。
如果出于某种原因确实需要source
该脚本,请确定是否需要特殊权限。如果必须,您可以su
以 root 身份运行source
该脚本。
此外,您得到的输出$ whereis source
source: /usr/share/man/man1/source.1.gz
似乎是一个man
页面。所以那可能没什么用!