在Perl中为新命令设置PATH变量会显示错误:找不到命令

在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

我正在编写一个Perl脚本来添加一个新命令。 为此:

  • 我使用了set env
    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后,它仍然显示找不到命令。关于这一点,有什么帮助吗?