LINUX.ORG.RU

Bash игнорирует #!/usr/bin/env python

 


0

1

Понять не могу, эта строчка работает через раз, при этом не вижу каких закономерностей. Как указать правильно? #!/bin/python и #!/usr/bin/python я тоже пробовал. Всё по указанным путям есть.

Deleted

Ответ на: комментарий от pavelshuvalov

Да, я знаю. И что? Хочешь сказать, что у меня с ядром что-то не так?

Deleted
()

Понять не могу, эта строчка работает через раз, при этом не вижу каких закономерностей.

Как мы должны догадаться, как именно она у тебя не работает?

Deleted
()
Ответ на: комментарий от Deleted

Я ничего про это не знаю, я просто пытаюсь осилить питон и изредка поигрываю в доту. Мне незнакомы механизмы ядра и всё такое. Пожалуйста, Вы можете указать на конкретную проблему?

Deleted
()
Ответ на: комментарий от Deleted

Я ничего про это не знаю, я просто пытаюсь осилить питон и изредка поигрываю в доту.

Nuff said.

Пожалуйста, Вы можете указать на конкретную проблему?

А ты можешь её корректно описать ? Все что выше - слабо связанный поток сознания.

joy4eg ★★★★★
()
Ответ на: комментарий от Deleted

Я ничего про это не знаю, я просто пытаюсь осилить питон и изредка поигрываю в доту

Выбери то, что у тебя больше получается

bvn13 ★★★★★
()
Ответ на: комментарий от joy4eg

Что не ясно сказано? Если не указывать #! в скрипте, скрипт будет запущен в bash. Я указал #!/usr/bin/python в скрипте, теперь когда я его запускаю (./script.py), он всё равно выполняется в bash. Почему?

Deleted
()
Ответ на: комментарий от Deleted

он всё равно выполняется в bash

Откуда инфа? Давай сюда вывод ./script.py и cat ./script.py

Deleted
()
Ответ на: комментарий от Deleted

«Не работает, помогите» — это не вопрос. Это вброс. Приучи себя к коллекционированию и выкладыванию логов

Deleted
()
Ответ на: комментарий от Deleted

Я указал #!/usr/bin/python в скрипте, теперь когда я его запускаю (./script.py), он всё равно выполняется в bash. Почему?

:D

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

Шебанг не обязателен, у меня работало и «python script.py». Лучше покажи свой код.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

Вот такие закономерности.

$ cat -n script.py 
     1  #!/usr/bin/env python
     2
     3  print("working")

$ chmod +x script.py

$ ./script.py
working

$ bash script.py 
script.py: рядок 3: синтаксична помилка коло неочікуваної лексеми «"working"»
script.py: рядок 3: `print("working")'

А если хочешь детальнее узнать как ядро распознает файлы, то посмотри как работает libmagic: например man magic (да-да магия!).

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от Deleted

Бинарник python может валяться где угодно, потому такие вещи загоняют в переменную окружения. env python == /bin/python == /usr/bin/python. Так что технически это верно. Чсх, сейчас шибанг работает. Но иногда нет.

Deleted
()
Ответ на: комментарий от Deleted

Может PATH отваливается у баша? В любом переустанови или откати его, если обновлял. Заодно и сам пайтон проверь.

Deleted
()
Ответ на: комментарий от Deleted

И еще: бинарник python должен лежать только в /usr/bin/ под названием python2 (под вторую версию) и/или python3 (под третью), т.к. не является системным ПО или утилитой.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Может быть в /usr/local/bin, например, во freebsd он скорее всего там окажется по-дефолту. Или если самому собирать. В некоторых других юниксах, он может быть зарыт где-то в /opt или ещё где.

Короче, вариант в env более переносимый и правильный.

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Короче, вариант в env более переносимый и правильный.

А где во фряхе находится сам env? Тоже в /usr/local/bin ?

Тогда при переносе все равно придется поправлять скрипт.

Deleted
()
Ответ на: комментарий от Deleted

env в /usr/bin везде. Это часть posix/sus etc.

А вот bash, например, там не дефолтный шелл и если его ставить из портов будет в /usr/local/bin

pawnhearts ★★★★★
()
Ответ на: комментарий от Deleted

ТС просто не читал про шебанг:

К сожалению, могу только подтвердить Ваш диагноз.

правильно будет
#!/usr/bin/python3

Кстати #!/usr/bin/env python3

KennyMinigun ★★★★★
()
Ответ на: комментарий от Deleted

А где во фряхе находится сам env? Тоже в /usr/local/bin ?

Ха, мне такой вопрос тимлид задал на код-ревью когда я отрефакторил его скрипт :D

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

Неа. Так тоже можно, если не встает вопрос о переносимости кода.

Так что я везде использую #!/usr/bin/python3, т.к. я знаю что это мои скрипты и запускаются они только на линуксе, а точнее на генте. Другими дистрибутивами не пользуюсь. На впске у меня тоже генточка =)

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

Ха, мне такой вопрос тимлид задал на код-ревью когда я отрефакторил его скрипт :D

И что ты ржешь довольный? Твой тимлид, как и я, просто с фряхой не работал. Ничего удивительного. По крайней мере, мне не доводилось изучать ее.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

т.к. не является системным ПО или утилитой.

В некоторых поставках это разделение с приходом Систем-Д, поломавшего /usr/, устарело, разве нет?

Zmicier ★★★★★
()
Ответ на: комментарий от Deleted

эта строчка работает через раз

Это не описание. Телепаты в отпуске.

Deleted
()
Ответ на: комментарий от KennyMinigun

$ bash script.py

Шебанг или как там его учитывается только при запуске как бинарнике или команде.
В этой же строке ты запускаешь баш с указанием script.py как подлежащего выполнению скрипта.
В этом случае шебанг интерпретируется как обычный комментарий.

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

Кстати, ведь ведро, встречая шебанг в начале исполняемого файла, тупо делает exec на строчку после шебанга, передавая в качестве параметра этот файл.

Т.е. получается, что в шебанге могут быть лишь интерпретаторы, которые # воспринимают как комментарий. Возможно, именно поэтому в перловке и пхытоне # — комментарий, а не // или /**/ как в нормальных языках. Кстати, в octave тоже комментарии можно как по-матлабовски % обозначать, а можно и по-башевски # — чтобы была возможность делать скрипты с шебангами.

anonymous
()
Ответ на: комментарий от Deleted

пытаюсь осилить питон и изредка поигрываю в доту

Ты уже играешь в доту, а значит овощ.

a1batross ★★★★★
()
Последнее исправление: a1batross (всего исправлений: 1)
Ответ на: комментарий от anonymous

Но вообще я удивлён что работу шебанга не объяснили в третьем же посте темы(ну первые два поста скорей всего троли сделают).
Но тут в теме полная некомпетентность, куда мир катится!

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от Deleted

Не смотрел. К тому же, это ещё ничего не означает. я как-то поставил интерфейс Латвии, ни слова не понимая в этом языке, и несколько дней так пользовался. Были ещё казахский, была винда на японском (коей я пользовался без проблем). Более того, моей первой вендой была Windows 3.0 на корейском языке. Корейский я тогда знал хоть и лучше, чем сейчас, но для чтения всех менюшек и экранов явно недостаточно :)

Надо будет украинскую локаль как-нибудь поставить.

buratino ★★★★★
()
Ответ на: комментарий от buratino

я как-то поставил интерфейс Латвии, ни слова не понимая в этом языке

Я надеюсь, что он-то адекватен, и ему вывод программ нужен для информации, а не для того, чтоб пыриться в непонятные буквосочетания или, прости г-споди, иероглифы

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.