Рейтинг:1

Команда Python3 отлично работает в терминале, но не в сценарии bash

флаг in

Я действительно в тупике.

Эта команда отлично работает, если я ввожу ее в командной строке терминала в Ubuntu 20.04:

python3 -c 'импортировать hddcoin.util.bech32m как b; print(b.decode_puzzle_hash("awalletaddress"). hex())'

Но если я сделаю ту же команду в сценарии bash:

PUZZLEHASH=$(python3 -c 'импортировать hddcoin.util.bech32m как b; print(b.decode_puzzle_hash("awalletaddress"). hex())')

Я получаю "команда не найдена". Если я изменю «python3» на «venv/bin/python3», что я и получаю, когда делаю какой питон3, то ошибка становится "нет такого файла или каталога". Это заставляет меня думать, что теперь он не находит скрипт Python, который я пытаюсь найти с помощью импорт hddcoin.util.bech32m часть. Но в сценарии bash я попадаю в родительский каталог этого сценария python.

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

Я искал везде и не могу найти никого, задающего аналогичный вопрос. Все поиски «нет такого файла или каталога» терпят неудачу при вводе в приглашение терминала. Ни у кого не было проблем с нормальной работой в терминале, но не в скрипте bash, который я могу найти.

Пробовал shebangs #!/bin/bash и #!/usr/bin/env bash, ни один из них не работает. (Исправленный)

Qwinn avatar
флаг in
Я почти уверен, что команда, которая не была найдена, была самой python3, потому что добавление venv/bin перед ней избавляет от этой ошибки, и тогда она становится «нет такого файла или каталога». Я думаю, что это тоже похоже на ошибку bash, но сообщение об ошибке не содержит дополнительной информации о том, к чему оно относится. И вы правы насчет shebangs, я просто набрал их неправильно. Кстати, я попытался добавить все возможные соответствующие родительские каталоги в PATH в сценарии. Не хорошо. Но не понимаю, как это может помочь, поскольку PATH не имеет этих каталогов в командной строке терминала, и все же это работает нормально.
флаг cn
Ray
Вам нужно идти шаг за шагом. Где вы набрали «какой python3»? В терминале или в вашем скрипте? Если вы можете найти python3, попробуйте более простую строку для тестирования - возможно, без `import`. Например, простое «Привет, мир!». В начале вашего bash-скрипта обязательно должен быть `#!/bin/bash` в качестве первой строки. Обратите внимание на `#!/` в качестве первых 3 символов...
флаг cn
Ray
@JacobVlijm Точка зрения принята, но это также был ответ на последнее предложение, в котором говорится: «Пробовал shebangs #!bin/bash и !usr/bin/env bash, ни один из них не работает». Оба эти пути неверны...
флаг cn
Ray
@JacobVlijm Ах! Понятно... Наверное, Квинну лучше просто исправить первоначальный вопрос? В исходном вопросе отсутствует слишком много информации, а длинный набор комментариев отпугнет людей...
vanadium avatar
флаг cn
Не стесняйтесь опубликовать свой собственный ответ в качестве ответа здесь и принять свой собственный ответ.
Рейтинг:1
флаг in

ОБНОВИТЬ:

Всем спасибо за помощь, разобрался в чем дело. Для потомков объясню.

Моя настоящая первоначальная попытка была такой:

PUZZLEHASH=$("python3 -c 'импортировать $FORKNAME.util.bech32m как b; print(b.decode_puzzle_hash(\""$WALLETADDRESS:\"). hex())'")

Казалось, это правильно расширилось со следующим сообщением об ошибке:

/home/qwinn/forktools/forkexplore: строка 86: python3 -c 'импортировать hddcoin.util.bech32m как b; print(b.decode_puzzle_hash("awalletaddress"). hex())': команда не найдена

Но когда я заменил переменные литералами и удалил двойные кавычки вокруг всей строки (включая двойные кавычки позади python3), все заработало. Итак, мой вопрос заключался в том, как расширить переменные без двойных кавычек вокруг всей строки. Это оказалось сложно (по крайней мере, для меня), но я, наконец, решил это так:

PUZZLEHASHEXEC=$(echo "python3 -c 'импортировать $FORKNAME.util.bech32m как b; print(b.decode_puzzle_hash(\""$WALLETADDRESS"\"). hex())'")

PUZZLEHASH=$(оценка $PUZZLEHASHEXEC)

Оценка была ключом.

В любом случае, спасибо всем за потраченное время, чтобы попытаться помочь!

Ответить или комментировать

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