Setting the PATH variable for a new command in Perl shows error: Command not found

Setting the PATH variable for a new command in Perl shows error: Command not found

我正在编写 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"?)

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

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

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

此外,如果脚本文件有 DOS CRLF line terminators (in particular, on the shebang line),那会产生相同的症状——消息是 debug: command not found,即使实际上找到了 debug 脚本,但是找不到 shebang 行上的命令。 (您会注意到 which debug 表示 tcsh 实际上找到了这种情况下的脚本。)

第二次尝试是错误的,因为 (a)sh 语法中赋值周围不能有空格,而 (b) 错误消息看起来像是您以某种方式将此命令传递给了 Perl 而不是 shell("Script:" 是什么意思?)

Bash(或通常 *sh 除了 *csh)提示符的正确语法是

export PATH="/home/user/trial_dir":$PATH

(我在这里也在 home 之前添加了前导 /)但是因为你说你正在使用 tcsh 我只是为了完整性而提到这个。这不是有效的 Perl 命令。

虽然这种方法没有任何问题,但通常的做法是将您的脚本(或它的符号链接)放在 $HOME/bin 中,并一劳永逸地确保 $HOME/bin 在你的 PATH(这已经是某些 Linux 发行版的默认设置)。

您添加的目录应该位于前一个 PATH 之前还是之后,这在很大程度上取决于个人喜好。现代 shells 通常使用散列,因此只有在您第一次尝试使用它时才会查找该命令,之后,shell 会记住可以找到它的位置。如果您经常输入错误的命令,请尽量限制您的 PATH。 :-) 如果您的命令需要遮蔽系统命令,请务必将新目录放在系统前面 PATH.