I need help creating a shell script to toggle between two commands.
When it is run command1
is executed then if it is run again it executes command2
and so on...
3 Answers
One good way of accomplishing this is for the script to create a blank "configuration file":
- The 1st time the script runs, it sees the file doesn't exist, creates it, and runs
command1
. - The 2nd time the script runs, it sees the file does exist, deletes it, and runs
command2
. - The 3rd time the script runs, it sees the file doesn't exist, creates it, and runs
command1
. - The 4th time the script runs, it sees the file does exist, deletes it, and runs
command2
.
And so forth.
Here's a script that does that:
#!/bin/sh
# This shell script is PUBLIC DOMAIN. You may do whatever you want with it.
TOGGLE=$HOME/.toggle
if [ ! -e $TOGGLE ]; then
touch $TOGGLE
command1
else
rm $TOGGLE
command2
fi
-
A slight improvement would be a semaphore file (touch .xxx) for 'last command', with a known first choice.– david6Jun 6, 2012 at 8:10
-
1@david6 You may want to post your own answer. It's not clear to me why that would be better, or how you intend to implement it. Aug 13, 2012 at 21:00
(As a complement to the main answer)
To make it display a message after running the commands, and also showing an icon - example for toggling touchpad off and on (source, also here):
#!/bin/sh
# This shell script is PUBLIC DOMAIN. You may do whatever you want with it.
TOGGLE=$HOME/.toggle_touchpad
if [ ! -e $TOGGLE ]; then
touch $TOGGLE
xinput disable 14
notify-send -u low -i mouse --icon=/usr/share/icons/HighContrast/256x256/status/touchpad-disabled.png "Trackpad disabled"
else
rm $TOGGLE
xinput enable 14
notify-send -u low -i mouse --icon=/usr/share/icons/HighContrast/256x256/devices/input-touchpad.png "Trackpad enabled"
fi
(in the above commands 14
is a variable to be identified with xinput list
)
You can write a file with your last command. Then when it is run again you read the file, and see which command was executed.