Considering the following simple script called ".drive-find-gd" which accepts a parameter, searches for a special folder & prints it::
#!/bin/bash
folder=$1
cd $folder
while [[ "$(pwd)" != / ]]
do
if [[ -n $(find . -name ".gd") ]]; then
echo "$(pwd)"
break
else
cd ..
fi
done
Loading it and running it without "set args ..."
bashdb /usr/bin/.drive-find-gd
bash debugger, bashdb, release 4.4-0.92
...
(/usr/bin/.drive-find-gd:55):
55: folder=$1
bashdb<0> l
53: #!/bin/bash
54:
55: => folder=$1
56:
57: cd $folder
58:
59: while [[ "$(pwd)" != / ]]
bashdb<1> run
Restarting with: /bin/bashdb /usr/bin/.drive-find-gd
/usr/share/share/bashdb/command/run.sh: line 78: cd: too many arguments
...
(/usr/bin/.drive-find-gd:55):
55: folder=$1
bashdb<0> l
53: #!/bin/bash
54:
55: => folder=$1
56:
57: cd $folder
58:
59: while [[ "$(pwd)" != / ]]
As we can see, the same right script has been loaded: ".drive-find-gd"
Now, if we call "set args ..." inside the same script:
bashdb<0> l
53: #!/bin/bash
54:
55: => folder=$1
56:
57: cd $folder
58:
59: while [[ "$(pwd)" != / ]]
bashdb<1> set args "/home/actionmystique"
bashdb<2> run
***Restarting with: /bin/bashdb /home/actionmystique***
/usr/share/share/bashdb/command/run.sh: line 78: cd: too many arguments
bash debugger, bashdb, release 4.4-0.92
...
/bin/bashdb: line 96: .: /home/actionmystique: is a directory
(/bin/bashdb:1):
1: #!/bin/bash
bashdb<0> l
1: => #!/bin/bash
2: # -*- shell-script -*-
3: # Top-level debugger program. This program may be initially invoked.
4: #
5: # Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
6: # 2009, 2010, 2011 Rocky Bernstein <rocky@gnu.org>
7: #
8: # This program is free software; you can redistribute it and/or
9: # modify it under the terms of the GNU General Public License as
10: # published by the Free Software Foundation; either version 2, or
As we can see here, run restarts the wrong script "Restarting with: /bin/bashdb /home/actionmystique" instead of 'Restarting with: /bin/bashdb /usr/bin/.drive-find-gd".
The issue seems obvious: bashdb replaces the original script name (/usr/bin/.drive-find-gd) by the argument entered in "set args": /home/actionmystique which is not a script but a path in this example.
Since bashdb realizes that "/home/actionmystique" is not a script but a folder, it triggers an internal error and it restarts at its first instruction.
I think what is going on here is that bashdb needs to figure out where the split between the debugged program and its arguments lie. If it is invoked via
bashdb, the script name lies after any bashdb optioons.However if the debugger was invoked via
bash --debuggerthat is not the case.I probably won't have time address this in the near term. If you want to try to fix this you'd look at flle
bashdb/command/run.shwhich would include out a new variable like script_name inexec_cmd_prefixand in setting_Dbg_script_argsin bashdb.in.A workaround for now is to include the script name in set args when it was invoked via
bashdb.Thanks for the workaround.