Сценарий Python с разрешением на выполнение исполняет команду «Команда не найдена» - PullRequest
0 голосов
/ 15 марта 2019

У меня есть скрипт на python abc.py. Внутри файла сценария оболочки я называю это ./abc.py

Внутри abc.py, наверху, у меня есть #!/usr/bin/python

test -x abc.py && echo true || echo false вернуть true

При выполнении сценария оболочки выдается ./abc.py: Command not found.

Это работает, если я назову это python ./abc.py вместо ./abc.py

Проблема только в этом файле abc.py, который я создал сегодня. Старые сценарии Python в одном каталоге с различным назначением и именами работают без проблем.

Я указал правильный путь к файлу BTW. В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 16 марта 2019

В tcsh это происходит, когда переводчик недействителен:

$ cat foo
#!/invalid

$ tcsh -c './foo'
./foo: Command not found.

$ bash -c './foo'
bash: ./foo: /invalid: bad interpreter: No such file or directory

Это может быть по нескольким причинам.Возможно, ваш путь неверен для вашей системы:

% type python
python is /usr/local/bin/python

, в этом случае скрипт должен начинаться с #!/usr/local/bin/python.

В качестве альтернативы, сценарий может иметь окончания строки Windows (возврат каретки):

$ cat -v foo
#!/usr/bin/python^M
...^M

В этом случае сохраните его с окончаниями строки Unix.

0 голосов
/ 16 марта 2019

Попытка повторить настройку следующим образом:

  1. Файл: asdf.py

    #!/usr/bin/python
    print("Hello World")
    
  2. Файл: asdf.sh

    #!/bin/bash
    if [ -x asdf.py ]; then ./asdf.py ; else echo "Arrrrgh. File does not exist or does not have executable permisions"; fi
    
  3. Теперь я сохраняю файлы в том же каталоге, например, на рабочем столе, делаю их исполняемыми и запускаю сценарий shell из терминала.

    usr@cmptr $ chmod +x asdf.{py,sh}
    usr@cmptr $ ls -la asdf.{py,sh}
    -rwxr-xr-x 1 usr usr 613 Mar 15 22:22 asdf.py
    -rwxr-xr-x 1 usr usr  56 Mar 15 22:14 asdf.sh
    usr@cmptr $ ./asdf.sh
    Hello World
    

Теперь, может быть, я неправильно понял вашу настройку, но это должно работать просто отлично.

...