在Perl中为新命令设置PATH变量会显示错误:找不到命令
我正在编写一个Perl脚本来添加一个新命令。 为此:在Perl中为新命令设置PATH变量会显示错误:找不到命令,path,command,environment-variables,Path,Command,Environment Variables,我正在编写一个Perl脚本来添加一个新命令。 为此: 我使用了set envPATH命令并添加了包含脚本的目录(名称与命令名相同) 我还使脚本可执行 我尝试了两种方法: 显式:在终端上使用setenv PATH$PATH“:home/user/trial\u dir” 在这里,当我键入命令名时,它会显示:Command not found 脚本:export PATH=“home/user/trial\u dir”。“.$PATH 这里写着: Can't locate object method
PATH
命令并添加了包含脚本的目录(名称与命令名相同)setenv PATH$PATH“:home/user/trial\u dir”
Command not found
export PATH=“home/user/trial\u dir”。“.$PATH代码>
Can't locate object method "export" via package "PATH"
(perhaps you forgot to load "PATH"?)
你的壳是什么
setenv
是csh语法,但错误消息看起来像Bash错误消息。无论如何,csh
和tcsh
的正确语法是
setenv PATH $PATH":/home/user/trial_dir"
请特别注意,在home
之前添加了斜杠。PATH
中的相对路径通常没有意义。我猜这就是你第一次尝试失败的原因
此外,如果脚本文件具有DOS CRLF(特别是在上),则会产生相同的症状——消息为debug:command not found
,即使实际找到了debug
脚本,但未找到shebang行上的命令。(您会注意到,whichdebug
表明tcsh
在本例中实际找到了脚本。)
第二次尝试是错误的,因为(a)在sh
语法中的赋值周围不能有空格,以及(b)错误消息看起来像是您以某种方式将此命令传递给了Perl,而不是shell(您所说的“Script:”是什么意思?)
Bash(或通常*sh
除外*csh
)提示符处的正确语法如下
export PATH="/home/user/trial_dir":$PATH
(我在home
之前也添加了一个前导的/
),但既然您说您使用的是tcsh
,我只是为了完整起见才提到这一点。这不是有效的Perl命令
虽然这种方法没有错,但一种常见的做法是将脚本(或其符号链接)放在$HOME/bin
中,并一次性确保$HOME/bin
位于路径中(这已经是某些Linux发行版的默认设置)
您添加的目录是否应该在前面的路径之前或之后,这在很大程度上取决于您的品味。现代shell通常使用散列,因此只有在您第一次尝试使用命令时才会查找该命令,之后,shell会记住在哪里可以找到该命令。如果您经常输入错误的命令,请尽量限制您的路径。
。:-)如果您的命令需要隐藏系统命令,一定要将新目录放在系统前面PATH
谢谢。我的shell是tcsh。我的脚本意思是,首先我运行一个PERL脚本,使用命令export设置路径。我在前面的脚本中尝试了setenv命令。它说找不到命令,所以我使用了export,即使删除空格后它也不起作用。实际上,我没有将此添加到$home/bin目录的权限。然而,我无法理解为什么第一种方法不起作用。export
是一个sh
命令,而不是Perl命令。Perl应该是$env{“PATH”}.=“:/home/user/trial_dir”
。当然,您可以访问$home/bin
;主目录中的所有内容都完全在您的控制之下不是首字母缩略词,不应该大写。非常感谢。我现在使用了一个shell脚本来代替PERL脚本。因此,现在setenv命令可以工作,路径也更新了。但是我仍然不明白为什么即使在将文件添加到目录并运行chmod+x filename后,它仍然显示找不到命令。关于这一点,有什么帮助吗?