выполнение python в bash

#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 для выполнения сценариев оболочки в других сценариях. Смотрите мой обновленный ответ.