Python3 命令在终端中运行良好,但在 Bash 脚本中却不行

Python3 命令在终端中运行良好,但在 Bash 脚本中却不行

我真是困惑不已。

如果我在 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)

评估是关键。

无论如何,感谢大家花时间尝试提供帮助!

相关内容