我正在尝试在 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