in reply to Re^2: values from perl to sh script
in thread values from perl to sh script
You can use the backtick operator or its equivalent (and prefearable, IMHO):
The latter has the added advantage of allowing nested subshell invocations.return1=`/path/to/script.pl arg1 arg2` return2=$(/path/to/script.pl arg1 arg2)
If your return value can have newlines, I'd suggest to use double quotes:
And yes, you can use read as well, but you have to be extremely careful about what you want to do. Suppose you have the following script:return_newlines="$(/path/to/script.pl arg1 arg2)"
and you want to set the variable value to the contents of the last line:#!/usr/bin/perl print $_, $/ for @ARGV;
you obtain:#!/bin/bash value=0 echo "value starts from $value" ./script.pl arg1 arg2 | while read line ; do value=$line echo "value is $value" done echo "after first while, value is $value" while read line ; do value=$line echo "value is $value" done <<<"$(./script.pl arg1 arg2)" echo "finally, value is $value"
Note that after the first while the variable value has not been modified. This is due to the fact that the first while cycle is being executed inside a subshell.value starts from 0 value is arg1 value is arg2 after first while, value is 0 value is arg1 value is arg2 finally, value is arg2
OTOH, the second while is executed directly by the "current" shell. This may lead to problems if you pass a lot of data back, anyway.
Note that there are also other ways, but there is too little space on the side of this post to write them.
Flavio
perl -ple'$_=reverse' <<<ti.xittelop@oivalf
|
|---|