Переменная пути и скрипт shebang не запускают правильную версию python

grep -lR '226 Transfer complete\.' --include='*.log'
1
10.01.2017, 07:18
2 ответа

Возможное решение

относительно вашей второй попытки с shebang в скрипте python:

  • Вы не можете использовать ~ в shebang; это должно быть фактический путь ( #! / inside / home / thjmatth / ... ).
  • Между именем каталога и именем программы не должно быть пробелов; оно должно быть #! / Inside / home / thjmatth / anaconda3 / bin / python / python3 .

Проверка работоспособности: У вас есть каталог с именем / inside / home / thjmatth / anaconda3 / bin / python , который содержит исполняемую программу с именем python3 (т. Е. Полный путь к программе-интерпретатору: / inside / home / thjmatth / anaconda3 / bin / python / python3 ?

Что-то, что стоит попробовать

Измените свой сценарий, чтобы сделать следующее:

#!/bin/sh

export PATH=~/anaconda3/bin/python:$PATH

while read p; do
  type python3
  screen -dm -S "$p" bash -c "type python3; exec sh"
done <cells.txt

и посмотрите, сможете ли вы выяснить, что происходит. Если вы все еще застряли, отредактируйте свой вопрос, включив в него вывод вышеуказанного.

Еще одно: Вы всегда должны указывать все ссылки на переменные оболочки (например, "$ p" ) , если у вас нет хорошая причина не делать этого, и вы уверены, что знаете, что делаете.

1
27.01.2020, 23:19
export PATH=~/anaconda3/bin/python:$PATH

Это похоже на путь к исполняемому файлу . ПУТЬ должен содержать каталоги:

export PATH=~/anaconda3/bin:$PATH

#!~/anaconda3/bin/python python3
  1. Строки Shebang нуждаются в фактических путях и не выполняют тильды (это в вашей оболочке). Запишите фактический путь в исполняемый файл, начиная с / .
  2. Эта строка shebang будет работать ~ / anaconda3 / bin / python с аргументом python3 , за которым следует имя сценария.Вы, вероятно, этого не хотите, а вместо этого запускаете либо python , либо python3 .

     #! / Home / thomas / anaconda3 / bin / python 
     

screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"

Если бы вы все еще использовали эту строку после обновления строки shebang, она была бы проигнорирована; python3 из вашего PATH (который не совпадает с python !) будет выполнен и запустит скрипт по очереди и просто пропустит shebang строка в качестве комментария. Если вы сделаете скрипт исполняемым ( chmod + x essentialpairs_ttest_tissue_1.py ), вы можете запустить его напрямую:

./essentialpairs_ttest_tissue_1.py

и строка shebang будет обработана.


В этом случае вы можете , вероятно, уйти, просто исправив переменную PATH из первого раздела, если только у вас нет стартовой конфигурации Bash, которая сбрасывает переменную. Если имя исполняемого файла - python , обязательно обновите командную строку screen , чтобы использовать ее вместо python3 .

3
27.01.2020, 23:19

Теги

Похожие вопросы