Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling one Bash script from another Script passing it arguments with quotes and spaces

I made two test bash scripts on Linux to make the problem clear.

TestScript1 looks like:
    echo "TestScript1 Arguments:"     echo "$1"     echo "$2"     echo "$#"     ./testscript2 $1 $2 
TestScript2 looks like:
    echo "TestScript2 Arguments received from TestScript1:"     echo "$1"     echo "$2"     echo "$#" 
When i execute testscript1 in the following way:
    ./testscript1 "Firstname Lastname" [email protected]   
The desired Output should be:
    TestScript1 Arguments:       Firstname Lastname       [email protected]       2     TestScript2 Arguments received from TestScript1:       Firstname Lastname       [email protected]       2   
But the actual output is:
    TestScript1 Arguments:       Firstname Lastname       [email protected]       2     TestScript2 Arguments received from TestScript1:       Firstname     Lastname           3   

How do i solve this problem? I want to get the desired output instead of the actual output.

like image 899
nmadhok Avatar asked Jun 07 '13 16:06

nmadhok


People also ask

How do you call a shell script from another shell script with parameters?

You need to use : "$@" (WITH the quotes) or "${@}" (same, but also telling the shell where the variable name starts and ends). (and do NOT use : $@ , or "$*" , or $* ). in the above post you mentino you want to invoke: salt '*mysql' cmd.

How do you pass quotes in a bash script?

When you want to pass all the arguments to another script, or function, use "$@" (without escaping your quotes). See this answer: Difference between single and double quotes in Bash.


1 Answers

Quote your args in Testscript 1:

echo "TestScript1 Arguments:" echo "$1" echo "$2" echo "$#" ./testscript2 "$1" "$2" 
like image 63
Markku K. Avatar answered Sep 20 '22 16:09

Markku K.