Проблема при попытке запустить сценарий оболочки: нет такого файла или каталога

Я пытаюсь запустить следующую команду в 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 на всякий случай, и я также проверил его разрешения на выполнение, которые, похоже, в порядке.

Что я здесь упускаю?

вы можете запустить сценарий 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

Пока вы пытаетесь:

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

оболочка всегда будет лечить . перед путем указывается текущий каталог, и, следовательно, путь всегда будет относительным путем. Итак, оболочка пытается найти исполняемый файл в расположении:

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

что, как вы можете видеть, неправильно. Вы бы запустили исполняемый скрипт, который является текущим каталогом как ./script.sh.

На самом деле вы можете просто запустить исполняемый файл, используя абсолютный путь (учитывая, что скрипт является исполняемым).:

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

Или как ~ расширяется оболочкой как $HOME:

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

Или даже просто имя скрипта, если каталог, содержащий скрипт, находится в PATH переменная среды.

Теперь, если ваш сценарий Не исполнимый, вы тоже можете запустить его не превращая его в исполняемый файл сообщив оболочке, какая программа будет обрабатывать сценарий, т.е. предоставив сценарий в качестве аргумента для bash (оболочка):

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

Когда вы используете ./ чтобы выполнить файл, он будет выглядеть в текущей папке (.) для папки с именем home вместо того, чтобы начинать с корня (/) каталог.

Используя bash команда явно, как в ответе Больцано, начинается с корневого каталога, а не с того, в котором вы находитесь.

Чтобы использовать команду без bash вы могли бы войти

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

или

Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

из вашего домашнего каталога, предполагая, что он помечен как исполняемый.

В дополнение к другим ответам
То, что ты попробовал, было почти в порядке... Но вы забыли добавочный номер .sh
- В твоем случае
./home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux/rvm.sh
- или
cd /home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux
./rvm.sh

У вас есть два разных пути, так что я предполагаю опечатку.