I'm trying to transfer a variable in a bash-script to an embedded python-function. A minimal example of the script I'm using is given below:
#!/bin/bash
function python_print() {
PYTHON_ARG="1ドル" python - <<END
import os
p = str(os.environ['PYTHON_ARG'])
print('The Variable is ' + p)
END
}
DIRIN=1ドル
FULLPATH=$ realpath $OUTFILE
python_print $FULLPATH
Running the script gives me: "The variable is "; so it seems the argument FULLPATH is not transfered to the function. The strange thing is, the code works if "$FULLPATH" is replaced either with "1ドル", "$DIRIN" or any hardcoded string. Where is my mistake? I'm grateful for any advice!
2 Answers 2
The problem is not in python_print function (note that function keyword is redundant with ()). but in FULLPATH assignment and function call
correct syntax
FULLPATH=$(realpath "$OUTFILE")
python_print "$FULLPATH"
- no space between
=and value in assignment - double quotes around variable expansion in function call
- expansion must be double quoted except
- if $ appears just after = in assignment
- conditions between double brackets
[[]]
note that
FULLPATH=$ realpath $OUTFILE
is not affecting FULLPATH in current shell process environment, it just sets FULLPATH to $ to realpath execution process environment also output is not captured.
Comments
Just either:
exportyour bash variable so it is available inos.environ- or use positional parameters and read it from
sys.argv
OUTFILEever defined?python_print $FULLPATHyou didecho $FULLPATHdoes it print the value you expect? I suspect the line above is meant to beFULLPATH=$(realpath $OUTFILE)