我正在编写一个Perl脚本来添加一个新命令。 为此:
我使用了set env PATH
命令并添加了包含脚本的目录(名称与命令名称相同)。
我还让脚本可执行。
我试过这两件事:
setenv PATH $PATH":home/user/trial_dir"
当我输入命令名称时,它会显示:Command not found
。
export PATH = "home/user/trial_dir".":".$PATH;
这里说:
Can't locate object method "export" via package "PATH"
(perhaps you forgot to load "PATH"?)
答案 0 :(得分:0)
你的贝壳是什么? setenv
是csh语法,但错误消息看起来像Bash错误消息。无论如何,csh
和tcsh
的正确语法是
setenv PATH $PATH":/home/user/trial_dir"
请特别注意home
之前添加的斜杠。 PATH
中的相对路径通常没有意义。我猜这是你第一次尝试失败的原因。
此外,如果脚本文件具有DOS CRLF line terminators(特别是在shebang line上),则会产生相同的症状 - 即使debug: command not found
消息为debug
实际上找到了{1}}脚本,但找不到shebang行上的命令。 (您会注意到which debug
表示tcsh
在这种情况下实际找到了脚本。)
第二次尝试是错误的,因为(a)你不能在sh
语法中分配空间,而(b)错误信息看起来像你以某种方式将此命令传递给Perl而不是shell(你是什么意思“脚本:”?)
Bash(或通常* sh
除了csh
)提示符的正确语法将是
export PATH="/home/user/trial_dir":$PATH
(我在/
之前添加了一个前导home
)但是因为你说你正在使用tcsh
我只是提到完整性。这不是有效的Perl命令。
虽然这种方法没有任何问题,但通常的做法是将您的脚本(或符号链接)放在$HOME/bin
中,只需一次,确保$HOME/bin
在您的PATH
中{1}}(这已经是某些Linux发行版的默认设置了。)
您添加的目录是否应该在上一个PATH
之前或之后出现,这在很大程度上取决于品味。现代shell通常使用散列,因此只有在您第一次尝试使用它时才会查找该命令,之后,shell会记住它的找到位置。如果您经常输错命令,可能会尽量限制PATH
。 :-)如果您的命令需要隐藏系统命令,请务必将新目录放在系统PATH
前面。