I'm trying to figure out how to create a bash with multiple arguments, and one argument has multiple flags. I need to do this to open xterm, navigate to bash script, and execute it with arguments.

This is my code:

if [ "$Running_In_New_Xterm" != t ] ; then
Running_In_New_Xterm=exec xterm -hold -e "cd $3 && $1 $2"

$2 is a command to run flags on $1 -a blah -o blahblah

I'm trying to determine the proper way to execute #2. I read I have to add ' ' when having an argument with multiple spaces, but I am trying that on the input side, and it isn't working. I get " unexpected EOF while looking for matching `' ' " which suggests my problem has something to do with the fact that $2 isn't being executed correctly. I'm at the point I think it has something to do with the bash itsel.

  • 2
    Apart from the issue of quoting and the shell's interpretation of the strings that you pass into that argument for xterm, you also assign Running_In_New_Xterm in the (environment of xterm) the value of exec. Is that a typo?
    – Kusalananda
    Apr 21 '18 at 19:23
  • I am executing xterm if the conditions aren't meant ( != t). I've tried it, and it works. It's just for some reason I'm having difficulty passing the $2 flags through another script, even when I put ' ' outside them i.e. '-a blah -o blah blah'
    – Jacob
    Apr 21 '18 at 19:36
  • 1
    Well, yes, I can see that. I was just curious about Running_In_New_Xterm=exec.
    – Kusalananda
    Apr 21 '18 at 19:37
  • There is no typos that I can see
    – Jacob
    Apr 21 '18 at 20:08
  • -e "cd $3 && $1 $2" does not work? What is the exact resulting command line you want executed (as you would type it into a shell)? Apr 22 '18 at 16:40

cd $3 && $1 $2 is not a program which can be called. You need

Running_In_New_Xterm=exec xterm -hold -e bash -c "cd $3 && $1 $2"

or (with quoting, if the arguments require that; -a blah -o blahblah should probably not be quoted)

Running_In_New_Xterm=exec xterm -hold -e bash -c "exec cd '$3' && exec '$1' '$2'"
  • No need of bash -c . Take a look at man xterm : One parameter (after all options) may be given. That overrides xterm's built-in choice of shell program: but The -e option cannot be used with this parameter since it uses all parameters following the option.
    – ctac_
    Apr 22 '18 at 12:36
  • @ctac_ But one parameter is not enough in this case. Apr 22 '18 at 14:57
  • 1
    what I want to say is 'cd $3 && $1 $2 is not a program which can be called' is false and the OP problem is not the shell. xterm always start a shell. If $1 is executable, the command line is ok.The issue is from quoting.I try this way and it's ok. "./scriptbash.sh 'ls' '-l *.txt' '../1'". I get in the xterm window the expected result : all files ended with .txt in the directory ../1
    – ctac_
    Apr 22 '18 at 15:28

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.