Hi Nicholas,
From: "Nicholas Marriott" <[email protected]>
> On Sun, May 29, 2011 at 12:28:04AM +0200, Helmut Schneider wrote:
>> Imagine a shell script which takes command line options (e.g. using
>> getopts)
>> and pass that script to tmux:
>
> Please give me an example of exactly what you are trying to do that is
> impossible.
I have a script, more a wrapper, that checks for screen and sudo and if
neither screen or sudo are active the script is restarted using screen
and/or sudo:
[helmut@BSDHelmut ~]$ cat ./check_for_root_and_start_screen.sh
#!/bin/sh
set -x
PATH=/bin:/usr/bin:/usr/local/bin
if [ -t 0 -a -x "$(which screen)" -a ! "${TERM}" = "screen" ]; then
$(which screen) "${@}"
exit 1
fi
#if [ -t 0 -a -x "$(which tmux)" -a ! "${TERM}" = "screen" ]; then
# $(which tmux) new "${@}"
# exit 1
#fi
exit 0
[helmut@BSDHelmut ~]$
I have another script that patches/updates hosts. Here, it only displays
those hosts:
[helmut@BSDHelmut ~]$ cat ./patch_all.sh
#!/bin/sh
#/home/helmut/check_for_root_and_start_screen.sh $0 "${@}" || exit $? # for
tmux
/home/helmut/check_for_root_and_start_screen.sh $0 "${@}" || exit $? # for
screen
while getopts "H:" option
do
case ${option} in
H) HOSTS="${OPTARG}"
;;
esac
done
shift `expr ${OPTIND} - 1`
for HOST in $(echo ${HOSTS}); do
echo ${HOST}
done
[helmut@BSDHelmut ~]$
This works fine with screen:
[helmut@BSDHelmut ~]$ ./patch_all.sh -H "host1 host2 host3"
+ PATH=/bin:/usr/bin:/usr/local/bin
+ which screen
+ [ -t 0 -a -x /usr/local/bin/screen -a ! xterm = screen ]
+ which screen
+ /usr/local/bin/screen -q ./patch_all.sh -H 'host1 host2 host3'
+ PATH=/bin:/usr/bin:/usr/local/bin
+ which screen
+ [ -t 0 -a -x /usr/local/bin/screen -a ! screen = screen ]
+ exit 0
host1
host2
host3
[screen is terminating]
+ exit 1
[helmut@BSDHelmut ~]$
I now tried to adapt that to use tmux so I uncomment/comment the
corresponding lines above:
[helmut@BSDHelmut ~]$ ./patch_all.sh -H "host1 host2 host3"
+ PATH=/bin:/usr/bin:/usr/local/bin
+ which tmux
+ [ -t 0 -a -x /usr/local/bin/tmux -a ! xterm = screen ]
+ which tmux
+ /usr/local/bin/tmux new ./patch_all.sh -H 'host1 host2 host3'
usage: new-session [-d] [-n window-name] [-s session-name] [-t
target-session] [command]
+ exit 1
[helmut@BSDHelmut ~]$
If it is of interest I then put an alias into /etc/profile:
patch_all_helmut_func () {
/usr/local/bin/patch_all.sh -puncH "host1 host2 host3" "${@}"
}
(The last "${@}" is used to provide additional arguments, the "real"
patch_all.sh script is a bit longer. It is mandatory that the script runs
with Bourne shell to be portable with other systems)
Helmut
------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery,
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now.
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
tmux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users