【问题标题】:Setting the PATH variable for a new command in Perl shows error: Command not found在 Perl 中为新命令设置 PATH 变量显示错误:找不到命令
【发布时间】:2015-06-02 23:58:18
【问题描述】:

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

  1. 我已经使用 set env PATH 命令并添加了包含脚本的目录(名称与命令名称相同)。

  2. 我还使脚本可执行。

我都尝试过这样做:

  1. 明确:在终端上使用setenv PATH $PATH":home/user/trial_dir"

这里显示:Command not found 当我输入命令名称时。

  1. 脚本:export PATH = "home/user/trial_dir".":".$PATH;

这里说:

Can't locate object method "export" via package "PATH"
(perhaps you forgot to load "PATH"?)

【问题讨论】:

    标签: path command environment-variables


    【解决方案1】:

    你的外壳是什么? setenv 是 csh 语法,但错误消息看起来像 Bash 错误消息。无论如何,cshtcsh 的正确语法是

    setenv PATH $PATH":/home/user/trial_dir"
    

    特别注意home 之前添加的斜线。 PATH 中的相对路径通常没有意义。我猜这就是你第一次尝试失败的原因。

    此外,如果脚本文件具有 DOS CRLF line terminators(特别是在 shebang line 上),则会产生相同的症状——即使实际找到了 debug 脚本,消息也是 debug: command not found ,但是找不到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 中(这已经是某些 Linux 发行版的默认设置)。

    您添加的目录是否应该位于之前的PATH 之前或之后,这在很大程度上取决于您的喜好。现代 shell 通常使用散列,因此只有在您第一次尝试使用它时才会查找该命令,之后,shell 会记住在哪里可以找到它。如果您经常输入错误的命令,请尽量保持您的PATH 尽可能有限。 :-) 如果你的命令需要隐藏系统命令,一定要把新目录放在系统前面PATH

    【讨论】:

    • 谢谢。我的 shell 是 tcsh。我的意思是首先我运行一个 PERL 脚本,使用命令 export 设置 PATH。我之前在脚本中尝试了 setenv 命令。它说找不到命令所以我使用了即使在删除空格后也不起作用的导出。实际上我没有权限将它添加到 $home/bin 目录。但是我无法理解为什么第一种方法不起作用。
    • exportsh 命令,而不是 Perl 命令。 Perl 将是$env{"PATH"} .= ":/home/user/trial_dir"
    • 你当然可以访问$HOME/bin;您的主目录中的所有内容都(或绝对应该)完全在您的控制之下。
    • "Perl" 不是首字母缩写词,不应大写。
    • 非常感谢。我现在使用 shell 脚本代替 PERL 脚本。所以现在 setenv 命令可以工作并且路径已更新。但即使添加了文件到目录并运行 chmod +x 文件名,它显示找不到命令。对此有任何帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多