#python #python-3.x #bash #shell
#python #python-3.x #bash #оболочка
Вопрос:
Запуск download-from-s3.py
с python3
именем перед именем скрипта работает, но я хотел бы иметь возможность запускать файл без него.
[nir test]$ ./test-download-from-s3.sh
../download-from-s3.py: line 2: import: command not found
../download-from-s3.py: line 3: import: command not found
[nir test]$ cat ./test-download-from-s3.sh
#!/bin/bash
. ../download-from-s3.py
Я попытался вставить два разных заголовка download-from-s3.py
, #!/usr/bin/env python3
и #!/usr/bin/python3
.
Ни то, ни другое не сработало.
Ответ №1:
.
является более коротким псевдонимом для source
. source
выполняет команды из файла в текущем сеансе оболочки. Точно так же, как вы скопировали-вставили файл python в скрипт. Поэтому нет смысла выбирать другой интерпретатор. Это действительно похоже #include
на C / C .
То, что вы хотите, это пометить файл как исполняемый ( chmod x
), а затем выполнить его так же, как это был сценарий оболочки:
./something.py
Примечание: также не используйте source
/ .
для выполнения сценариев оболочки. Таким образом, выполняемый скрипт может случайно переопределить / переопределить некоторые переменные или функции в основной программе. Поиск файлов выполняется, когда вы явно хотите импортировать функции, считывать переменные и т. Д.
Комментарии:
1. @Nir также не используется
source
для выполнения сценариев оболочки в других сценариях. Смотрите мой обновленный ответ.