尝试运行 shell 脚本时出现问题:没有这样的文件或目录

尝试运行 shell 脚本时出现问题:没有这样的文件或目录

我正在尝试在 bash 上运行以下命令:

./home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

这给了我一个

bash: ./home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux/rvm: No such file or directory

rvm是一个 bash 文件,当我尝试从其自己的文件夹 ( production_x86_64-linux) 运行它时,它确实可以正常运行。如果我尝试在其父文件夹中打开终端时运行它,它也可以正常工作,例如,甚至是在其父级父级文件夹中。

我已经尝试过它了,以防dos2unix万一,并且还检查了它的执行权限,似乎没有问题。

我在这里遗漏了什么?

答案1

你可以使用以下命令运行 bash 脚本

bash <location of the script file>

你的情况

bash /home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux/rvm

它会起作用

. 的基本含义是您当前的目录位置。

如果你在你的<user>文件夹下,那么尝试这样做

./Desktop/jikesrvm/dist/production_x86_64-linux/rvm

它可以工作,但首先你应该使用以下命令使文件可执行

chmod +x ~/Desktop/jikesrvm/dist/production_x86_64-linux/rvm

答案2

当你尝试时:

./home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

shell 总是将.路径前面的内容视为当前目录,因此该路径始终是相对路径。因此,shell 尝试在以下位置查找可执行文件:

$PWD/home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

如您所见,这是错误的。您将运行一个可执行脚本,该脚本是当前目录./script.sh

实际上,您可以简单地使用绝对路径来运行可执行文件(假设脚本是可执行的):

/home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

或者~按照 shell 的扩展形式如下$HOME

~/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

或者如果包含脚本的目录位于环境变量中,则甚至只是脚本的名称PATH

现在如果你的脚本是不可执行,你也可以运行它无需使其成为可执行文件通过告诉 shell 哪个程序将处理该脚本,即将脚本作为参数传递给bash(shell):

bash /home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

答案3

当您使用./执行文件时,它将在当前文件夹 ( .) 中查找名为的文件夹home,而不是从根 ( /) 目录开始。

像 bolzano 的答案中那样明确使用bash命令从根目录开始,而不是从您所在的目录开始。

要使用命令,bash你可以输入

/home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

或者

Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

从您的主目录,假设它被标记为可执行文件。

答案4

除了其他答案之外,
您尝试的方法几乎没问题...但是您忘记了扩展名.sh
-就您而言
./home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux/rvm.sh
-或者
cd /home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux
./rvm.sh

相关内容