Исполняемая символическая ссылка приводит к «команда не найдена»

24

Я создал символическую ссылку (вчера) так:

sudo ln -s bin/python /usr/bin/prj-python

Когда я бегу:

prj-python file.py

Я получил:

prj-python: command not found

Когда я снова пытаюсь создать ссылку, я получаю:

ln: создание символической ссылки `/ usr / bin / prj-python ': файл существует

Почему это происходит? Мой $PATHэто:

/ USR / местные / SBIN: / USR / местные / бен: / USR / SBIN: / USR / бен: / SBIN: / бен: / USR / игры: / OPT / реальный / RealPlayer

xralf
источник

Ответы:

21

Вы забыли начальный слеш раньше bin/python. Это значит /usr/bin/prj-pythonтеперь указывает на /usr/bin/bin/python. На что именно вы хотели бы указать?

janmoesen
источник
Там нет начального слеша. pwdэто /home/xralf/my_virtual_envи есть подкаталог binс pythonкомандой
xralf
8
Чем ты забыл $PWD/раньше bin.
RVS
Спасибо, это помогло. Я использовал эту команду, как это было в книге.
xralf
25

Вещи, чтобы проверить:

  • Выполнить ls -l /usr/bin/prj-python

Если это так:

lrwxrwxrwx (...) /usr/bin/prj-python -> bin/python

файл будет фактически найден в / usr / bin / bin / python (это то, что xralf пытался сказать). Fix:

rm /usr/bin/prj-python
ln -s /full/path/to/your/python /usr/bin/python-prj

  • Если ваш bin/pythonскрипт является оболочкой (он же. Wrapper-script), проверьте строку #! - (иногда ее называют shebang -line) в первой строке. Если есть опечатка , как , #!/bin/bushчто вызовет не нашел сообщение об ошибке также.
КТФ
источник
спасибо, ваш ответ еще более внимательный и познавательный. Извините, я уже принял.
xralf
это очень помогло ... большинство ответов, если были найдены, были о $ PATH
Ja8zyjits
Я использую ln без параметра. Люди должны действительно использовать ln -s, создавая тем самым символическую ссылку.
Седрик
Помог, и я использовал ln -s $PWD/python /usr/bin/python-prj. $PWDиспользуется для получения полного пути.
Манвал