Puncte:1

Comanda Python3 rulează bine în terminal, dar nu și în scriptul bash

drapel in

Sunt cu adevărat nedumerit.

Această comandă funcționează perfect dacă o introduc la un prompt de terminal în Ubuntu 20.04:

python3 -c 'import hddcoin.util.bech32m ca b; print(b.decode_puzzle_hash("awalletaddress"). hex())'

Dar dacă fac aceeași comandă într-un script bash:

PUZZLEHASH=$(python3 -c 'import hddcoin.util.bech32m ca b; print(b.decode_puzzle_hash("awalletaddress")). hex())')

Primesc „comanda nu a fost găsită”. Dacă schimb „python3” în „venv/bin/python3”, ceea ce primesc atunci când o fac care python3, atunci eroarea devine „nici un astfel de fișier sau director”. Ceea ce mă face să cred că acum nu găsesc scriptul python pe care încerc să-l găsesc cu import hddcoin.util.bech32m parte. Dar în scriptul bash sunt CD-ul în directorul părinte al acelui script python.

De fapt, pot tăia și lipi comanda așa cum este afișată în mesajul de eroare într-un prompt de terminal și funcționează bine.

Am căutat peste tot și nu găsesc pe nimeni care să pună o întrebare similară. Toate căutările pentru „nici un astfel de fișier sau director” nu reușesc când sunt introduse într-un prompt de terminal. Nimeni nu a avut probleme cu funcționarea corectă în terminal, dar nu într-un script bash pe care îl pot găsi.

Am încercat shebangs #!/bin/bash și #!/usr/bin/env bash, niciunul nu funcționează. (Corectat)

Qwinn avatar
drapel in
Sunt destul de sigur că comanda care nu a fost găsită a fost python3 în sine, deoarece adăugarea venv/bin în fața ei scapă de acea eroare și apoi devine „nici un astfel de fișier sau director”. Cred că și asta arată ca o eroare bash, dar mesajul de eroare nu oferă informații suplimentare despre la ce se referă. Și ai dreptate în privința shebangs, doar le-am scris greșit. BTW am încercat să adaug fiecare director părinte relevant posibil la PATH în cadrul scriptului. Nu e bine. Dar nu văd cum ar putea ajuta, deoarece PATH nu are acele directoare la promptul terminalului și totuși funcționează bine.
drapel cn
Ray
Trebuie să mergi pas cu pas. Unde ai tastat „care python3”? Într-un terminal sau în scriptul tău? Dacă reușiți să găsiți python3, atunci încercați o linie mai ușoară de testat -- poate fără „import”. Un simplu „Bună, lume!”, de exemplu. Partea de sus a scriptului tău bash ar trebui să aibă cu siguranță un `#!/bin/bash` ca primă linie. Notați `#!/` ca primele 3 caractere...
drapel cn
Ray
@JacobVlijm Punctul a fost luat, dar a fost și ca răspuns la ultima propoziție care spune „Tried shebangs #!bin/bash and !usr/bin/env bash, any work.”. Ambele căi sunt greșite...
drapel cn
Ray
@JacobVlijm Ah! Înțeleg... Probabil mai bine ca Qwinn să corecteze întrebarea inițială? Lipsesc prea multe informații din întrebarea inițială și un set lung de comentarii îi va opri pe oameni...
vanadium avatar
drapel cn
Simțiți-vă liber să postați propria constatare ca răspuns aici și să vă acceptați propriul răspuns.
Puncte:1
drapel in

ACTUALIZAȚI:

Mulțumesc tuturor pentru ajutor, mi-am dat seama ce se întâmplă. Pentru posteritate voi explica.

Încercarea mea inițială reală a fost aceasta:

PUZZLEHASH=$("python3 -c 'import $FORKNAME.util.bech32m ca b; print(b.decode_puzzle_hash(\""$WALLETADDRESS:\"). hex())'")

Acest lucru părea să se extindă corect, cu următorul mesaj de eroare:

/home/qwinn/forktools/forkexplore: linia 86: python3 -c 'import hddcoin.util.bech32m ca b; print(b.decode_puzzle_hash("awalletaddress"). hex())': comanda nu a fost găsită

Dar când am înlocuit variabilele cu literale și am eliminat ghilimelele duble din jurul întregului șir (inclusiv ghilimelele duble din spatele python3), totul a funcționat. Deci întrebarea mea a devenit cum să extind variabilele fără a fi nevoie să aibă ghilimele duble în jurul întregului șir. Acest lucru s-a dovedit complicat (cel puțin pentru mine), dar în cele din urmă l-am rezolvat astfel:

PUZZLEHASHEXEC=$(echo "python3 -c 'import $FORKNAME.util.bech32m ca b; print(b.decode_puzzle_hash(\""$WALLETADDRESS"\"). hex())'")

PUZZLEHASH=$(eval $PUZZLEHASHEXEC)

Evalul a fost cheia.

Oricum, vă mulțumesc tuturor pentru timpul acordat pentru a încerca să vă ajutați!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.