python - Bash 脚本 - 使用 Python 输出时找不到命令错误
问题描述
我有一个 bash 脚本,它调用了一个 python 脚本。Python 脚本返回一个对象,然后我将其分配给 bash 中的一个变量并必须返回。
当我尝试评估 python 脚本的输出时,我收到命令未找到。Bash 将其视为命令而不是值。
下面是代码:
function myfunc()
{
local __resultvar=$1
local myresult=$(/home/centos/pentaho2.py)
eval $__resultvar="'$myresult'"
}
myfunc result
echo $result
我的 python 命令返回一个像这样的值:
[('quatre vingt douze ave des champs-élysées', 'road')]
执行脚本后,我看到此错误:
./pentaho2.sh: line 5: vingt: command not found
有人可以帮助我了解我在这里缺少什么吗?
解决方案
如果您的 bash 版本是 4.3 或更高版本,则在函数中使用 nameref 可以避免eval
和固有的引用问题
myfunc() {
local -n __resultvar=$1
__resultvar=$(/home/centos/pentaho2.py)
}
myfunc result
echo "$result"
要查看操作中的错误,请使用set -x
:
myresult="[('quatre vingt douze ave des champs-élysées', 'road')]"
set -x
eval result="'$myresult'"
输出
+ eval 'result='\''[('\''quatre vingt douze ave des champs-élysées'\'', '\''road'\'')]'\'''
++ result='[(quatre'
++ vingt douze ave des 'champs-élysées, road)]'
确实是引用问题。
另一种方法是使用declare
而不是eval
$ __resultvar=result
$ declare "$__resultvar=$myresult"
$ declare -p result
declare -- result="[('quatre vingt douze ave des champs-élysées', 'road')]"
推荐阅读
- java - 有谁知道kafka生产者挂起修复
- android - 使用 TextField 值进行操作
- postgresql - Postgres 正则表达式停止创建双倍空间
- amazon-web-services - AWS SAM CLI TypeError: __init__() 在 Windows 安装后立即得到了一个意外的关键字参数“隐藏”
- python - 如何将样式功能添加到功能 GeoJson 以映射数据?
- python - 查找具有容差的重复项并分配给 pandas 中的一组
- performance - 执行时间的波动,这是正常的吗?
- mysql - 如何在mysql中使用数组数据类型?
- macos - 如何在 Mac 上构建 PortAudio?
- vector - 两个特征向量之间的全零互相关矩阵是否意味着特征向量是正交的?