22

I need to extend a shell script (bash). As I am much more familiar with python I want to do this by writing some lines of python code which depends on variables from the shell script. Adding an extra python file is not an option.

result=`python -c "import stuff; print('all $code in one very long line')"` 

is not very readable.

I would prefer to specify my python code as a multiline string and then execute it.

cknoll
  • 2,130
  • 4
  • 18
  • 34

2 Answers2

25

Use a here-doc:

result=$(python <<EOF
import stuff
print('all $code in one very long line')
EOF
)
Barmar
  • 741,623
  • 53
  • 500
  • 612
7

Tanks to this SO answer I found the answer myself:

#!/bin/bash

# some bash code
END_VALUE=10

PYTHON_CODE=$(cat <<END
# python code starts here
import math

for i in range($END_VALUE):
    print(i, math.sqrt(i))

# python code ends here
END
)

# use the 
res="$(python3 -c "$PYTHON_CODE")"

# continue with bash code
echo "$res"
Community
  • 1
  • 1
cknoll
  • 2,130
  • 4
  • 18
  • 34