myDSL Extensions (deprecated) :: Aghhh! Keeping shell window open after menu launch
How do you keep a window open after running an executable?
Having conquered editing my fluxbox menus to add apps installed via synaptic, I thought it might be pleasant to be able to launch the command-line prog 'wipe' (say with the help info) from the right-click menu. This is a secure file deletion utility from apt-get and runs just dandy from a shell.
Now I've tried a hundred things - all of them open a window for a picosecond before closing, presumably running wipe for that picosecond. For eg:
[exec] (Wipe) {rxvt -rv -fn fixed -T "Wipe" -e /usr/bin/wipe -h}
# this is in imitation of the bashburn line
I've also tried calling Xterm instead which is supposed to have a -hold option to keep a window open after executing according to man - this don't work. But then dsl doesn't have he full version of this, does it?
I've tried a lot of googling without success - too many dead-ends to remember.
Agghhhhhhh!!!!
I think the xterm in DSL is still rxvt, so xterm options which aren't available in rxvt probably won't work.
Personally I just open a terminal and type the command if I want the term to remain open....it's really pretty easy =o)
Thanks for info about rxvt. Granted, just opening a shell and typing in a shell is easy enough. But I suppose it's become more the principle of the thing now! (I'm nothing if not stubborn).
I mean, the bashburn line I quoted above does it for bashburn using rxvt, so it must be possible. But exactly the same syntax doesn't work for another command line executable!
I noticed while I was googling that someone had had exactly the same question on a forum for some type of CLI nix implementation on MacOSX. There it had been solved two ways but the best was by running a simple sh script foo.sh from the line in the desktop menu prefs which opened a window and then executed whatever argument(s) followed the script using {*}. The window then wouldn't close until you did something in it. But I copied both methods and tried and they didn't work - either under sh or bash - but maybe different syntax. I've had trouble finding it again but I'll have another look.
Any 'nix 'perts out there?
Well I've found a brute force solution of sorts mainly by very much trial and error however I doubt it's the best one. (Coders avert thy gaze).
I wrote a little script opt/burble.sh which diplays the wipe help file and then calls the bash shell in an infinite (?) loop so the !@#^^&&**
bastard can't close. Bend to my will or run forever .. So at least using the fluxbox menu to access wipe throws up the help file to read and keeps a shell open:
#!/bin/sh
/usr/bin/wipe -h
while true
do
/bin/bash
done
In /home/dsl/.fluxbox/menu I then put:
[exec] (Wipe) {sudo rxvt -rv -fn fixed -T "Wipe" -e /opt/./burble.sh}
I thought you'd be horrified! You can't quit the shell by typing exit but the window can be closed by clicking the X.
Of course, I wonder if the loop is still running underneath in which case it needs an improvement to shut that off!??
I tried experimenting with "wait" but to no avail.
I gather that the actual problem is that wipe is running as a child of rxvt parent and the parent terminates when the child does, or something.
However I don't know
enough (anything) about process management in linux to fix this, 'fork()' and such.
Takers?
I'm more a giver than a taker.
woofy, have you tried sleep? I find that sleep can be a useful thing sometimes. As in sleep 15 at the end of a script to keep the window open.
An even better solution is to use a line like this:
[exec] (Wipe) {rxvt -rv -T "Wipe" -e /bin/bash --init-file /opt/.../burble}
and put your commands in the burble file. That uses burble as a start up script for bash. When that's done, you're in a bash shell. Do only that and you're OK, but I added the PS1 line to match the prompt to the default one. My burble would look like this:
PS1='\u@\h:\w\$ '
/usr/bin/wipe -h
Next Page...
original here.