我真是困惑不已。
如果我在 Ubuntu 20.04 的终端提示符下输入此命令,它可以正常工作:
python3 -c 'import hddcoin.util.bech32m as b; print(b.decode_puzzle_hash("awalletaddress"). hex())'
但是如果我在 Bash 脚本中执行相同的命令:
PUZZLEHASH=$(python3 -c 'import hddcoin.util.bech32m as b; print(b.decode_puzzle_hash("awalletaddress"). hex())')
我收到“命令未找到”的错误提示。如果我将“python3”更改为“venv/bin/python3”(我执行此操作时收到此错误提示)which python3
,则错误将变为“没有此文件或目录”。这让我想到现在找不到我试图使用该import hddcoin.util.bech32m
部分查找的 python 脚本。但在 bash 脚本中,我通过 CD 进入了该 python 脚本的父目录。
我实际上可以将错误消息中显示的命令剪切并粘贴到终端提示符中,并且它可以正常运行。
我到处都搜索过了,没找到问类似问题的人。在终端提示符中输入“没有这样的文件或目录”的所有搜索都失败了。我找到的 bash 脚本中,没有人遇到过在终端中运行正常但运行不正常的问题。
尝试了 shebangs #!/bin/bash 和 #!/usr/bin/env bash,均不起作用。(已更正)
答案1
更新:
感谢大家的帮助,我明白发生了什么。为了后人,我会解释的。
我实际最初的尝试是这样的:
PUZZLEHASH=$("python3 -c 'import $FORKNAME.util.bech32m as b; print(b.decode_puzzle_hash(\""$WALLETADDRESS:\"). hex())'")
这似乎可以正确扩展,并显示以下错误消息:
/home/qwinn/forktools/forkexplore: line 86: python3 -c 'import hddcoin.util.bech32m as b; print(b.decode_puzzle_hash("awalletaddress"). hex())': command not found
但是当我用文字替换变量并删除整个字符串周围的双引号(包括 python3 后面的双引号)时,一切都正常了。所以我的问题变成了,如何扩展变量而不必在整个字符串周围使用双引号。这被证明很棘手(至少对我来说),但我最终像这样解决了它:
PUZZLEHASHEXEC=$(echo "python3 -c 'import $FORKNAME.util.bech32m as b; print(b.decode_puzzle_hash(\""$WALLETADDRESS"\"). hex())'")
PUZZLEHASH=$(eval $PUZZLEHASHEXEC)
评估是关键。
无论如何,感谢大家花时间尝试提供帮助!