I just created bash script and want to append the variable script, but it was not working properly, and here is the script :

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' 

I tried to run append this script using echo but the results is not the same:

echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt 

if we cat wew.txt the result was :

export PROMPT_COMMAND='RETRN_VAL=0;logger -p local6.debug widianto [69]: echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt []' 

Thanks for your help

0

2 Answers

What you're observing here is that 'strong quotes' lose their strength when wrapped in "weak quotes":

$ echo $foo bar $ echo '$foo' $foo $ echo "echo '$foo'" echo 'bar' 

Although you could fix your code by backslash-escaping every special character, a better way to avoid expansion by the shell might be to use a here-document instead of an echo, and quote (in any of the supported ways - weak, strong or backslash) the end marker:

$ cat << \EOF export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' EOF export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' 
0

I have succesfully with created variable :

widianto@rancher3:~$ cat b.bash #!/bin/bash # widianto a="export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug" b='"$(whoami) [$$]: $(history 1 | sed' c='"s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' echo "$a $b $c'" >> /home/widianto/test.txt 

Thank you

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy