-->

庆典:字符串插值(bash: string interpolation)

2019-09-19 05:46发布

我从一个Python模块返回一个字符串,消费的bash脚本中。

这是我到目前为止有:

SCRIPT_DIR=/somepath/to/scripts/folder
cd $SCRIPT_DIR/eod

python_cmd='import sys;
            sys.path.append("/somepath/to/scripts/folder/utils"); 
            import settings as st; 
            print " ".join(st.foo())'

# Fix indentation for Python
python_cmd=${python_cmd//'            '/''}

my_array=(`python -c "$python_cmd"`)

我想用干理念在上面的代码片段。 然而,串/somepath/to/scripts/folder重复脚本。 我想的$ SCRIPT_DIR定义传递到PYTHON_CMD - 但是我想(替换用$ SCRIPT_DIR / utils下的PYTHON_CMD路径字符串,并将其与失败,错误如下:

Traceback (most recent call last):
  File "<string>", line 3, in <module>
ImportError: No module named settings

我究竟做错了什么?

注意:

我运行bash 4.1.5

Answer 1:

不要刻意去传递字符串在所有。 而不是修改的sys.path在Python文本,修改在bash脚本PYTHONPATH环境变量。 这是更容易,反正影响进口路径的首选方式。

如何设置路径的一个例子:

SCRIPT_DIR=/somepath/to/scripts/folder
cd $SCRIPT_DIR/eod

export PYTHONPATH=$SCRIPT_DIR
python_cmd='import settings as st; 
            print " ".join(st.foo())'

我也不得不说,这似乎是一种奇怪的方式,以胶体成分在一起,但我没有足够的信息来推荐一种更好的方式。



Answer 2:

由于蟒蛇命令单引号括起来, $SCRIPT_DIR没有展开。 尝试这个:

python_cmd='import sys;
            sys.path.append("'$SCRIPT_DIR'");
            import settings as st; 
            print " ".join(st.foo())'

这就是说,我会与修改答案去PYTHONPATH



文章来源: bash: string interpolation
标签: python bash