我无法让$PATH
工作。我做错了什么不理解?
192:~ me$ echo $PATH
/User/me/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
192:~ me$ ruby rtest
ruby: No such file or directory -- rtest (LoadError)
192:~ me$ cd ~/bin
192:bin me$ ruby rtest
Hello World!
为什么不能从rtest
内的任何地方找到/User/me/bin
?
rtest
只有两行:
#!/usr/bin/env ruby
puts 'Hello World!'
答案 0 :(得分:1)
$PATH
是shell搜索可执行文件和脚本的目录列表。在您的情况下,可执行文件为ruby
,rtest
是ruby
的参数。 shell仅搜索ruby
并运行它,将rtest
作为字符串提供给Ruby。无论程序如何处理其参数都取决于程序。在您的情况下,它是Ruby要查找的文件的名称。如果没有给出目录名,它会在当前目录中查找名为rtest
的文件。如果它在那里,它运行它,如果不是它抱怨。在您的主目录中,没有此类文件,因此ruby
会抱怨。当您切换到文件所在的目录时,它可以在当前目录中找到它,因此它会运行它。
尝试将rtest
放入~/bin
并将其设为可执行文件:
chmod +x ~/bin/rtest
脚本的第一行(#!/usr/bin/env ruby
)告诉shell如何运行它。您应该可以从任何地方运行它:
$ rtest
(而不是ruby rtest
。)除非您有权执行该脚本,否则不会执行该脚本。