Stephan H
Stephan H

Reputation: 3

Pass Variable to Python in Bash Script

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!

Upvotes: 0

Views: 159

Answers (2)

Nahuel Fouilleul
Nahuel Fouilleul

Reputation: 19315

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.

Upvotes: 1

liberforce
liberforce

Reputation: 11454

Just either:

  • export your bash variable so it is available in os.environ
  • or use positional parameters and read it from sys.argv

Upvotes: 0

Related Questions