Hello Bil, I am sitting in the Internet Cafee in Strasbourg and stay there up to 19:00 Please test the new version of the script...
'xgettext' will produce 8 strings to translate:
msgid "usage: $0 [-X] [-p <user>] -c <command>\\n -c command: command to
execute\\n -p <user>: user to switch to (default: root)\\n -X: command is a
X11 program\\n"
msgid "About to execute $COMMAND.\\nThis command needs $PRIV privileges to be
executed.\\n
msgid "Using $suname...\\nEnter $PRIV passwd:\\n"
msgid "Y"
msgid "y"
msgid "N"
msgid "n"
msgid "Incorrect password or command failed. Try again? (y/n)'"
Am 2007-04-19 22:48:02, schrieb Bill Allombert:
> On Sun, Aug 20, 2006 at 08:28:26AM -0500, Christian Perrier wrote:
> > > GT5=$(gettext 'Incorrect password or command failed. Try again?')
> > > echo -n "${GT5} (${ANS})"
> > > read ans
> > > if [ ${FLAG} -eq 0 ] ; then
> > > if test "${ans}" != "y" -a "${ans}" != "Y"; then exit 1 ; fi
> > > elif [ ${FLAG} -eq 1 ] ; then
> > > if test "${ans}" != "j" -a "${ans}" != "J"; then exit 1 ; fi
> > > elif [ ${FLAG} -eq 2 ] ; then
> > > if test "${ans}" != "o" -a "${ans}" != "N"; then exit 1 ; fi
> > > fi
> > > }
> >
> > I'm not sure how to do it in shell programming, but this anyway
> > doesn't scale very well to other languages. The locale information
> > should be used here (the Yes/No shortcuts are part of locale
> > files....I'm however not aware of the exact way to use them).
>
> I have rewritten su-to-root to be more l10n-friendly by removing text
> duplication and using printf.
>
> I need two advices from the l10n experts:
> 1) the best way to check if gettext is available.
sonce the gettext strings in a shell script are:
gettext 'Hello Bil!'
or
eval_gettext "Hellp ${FRIEND}!"
I use now at the beginning of the shell scripts:
----8>----------------------------------
if [ -n "$(which gettext)" ] ; then
. gettext.sh
TEXTDOMAIN=exampleprog
TEXTDOMAINDIR=/usr/share/locale
else
gettext()
{
echo "$1"
}
eval_gettext()
{
echo "$1"
}
fi
----8>----------------------------------
Which works without any errors...
> 2) the best way to deal with the yes/no prompting above.
echo "Please answer with Y or N:"
>
> Is there good examples of l10n scripts in Debian?
^^
Are
Unfortunatly not, but maybe we can ask the "gettext" maintainer to
add my sniplet
> I have attached the current, mostly untested, version.
I will test it...
----8<------------------------------------------------------------------
#!/bin/bash
if test -r ~/.su-to-rootrc; then
. ~/.su-to-rootrc
fi
PRIV=root
COMMAND=
NEEDS=text
if [ -n "$(which gettext)" ] ; then
. gettext.sh
TEXTDOMAIN=su-to-root
TEXTDOMAINDIR=/usr/share/locale
else
gettext()
{
echo "$1"
}
eval_gettext()
{
echo "$1"
}
fi
eshell() {
getent passwd $1 | cut -f7 -d:
}
usage () {
txt=$(gettext "usage: $0 [-X] [-p <user>] -c <command>\n -c command: command
to execute\n -p <user>: user to switch to (default: root)\n -X: command is a
X11 program\n")
echo -e "$txt" >&2
exit 1
}
for i in "$@"; do
case "$prev" in
-p)
PRIV="$i";;
-c)
COMMAND="$i";;
-X)
NEEDS="X11";;
esac
prev="$i"
done
if [ -z "$COMMAND" ] ; then
usage;
fi
euid=$(id -u)
privid=$(id -u $PRIV)
if test "$euid" = "$privid"; then
$COMMAND
else
case $NEEDS in
text)
if test "$euid" != 0; then
txt=$(eval_gettext 'About to execute $COMMAND.\nThis command needs $PRIV
privileges to be executed.\n')
echo -e "$txt"
fi
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
SHELL=`eshell $PRIV`
case $SU_TO_ROOT_SU in
sux) suname=sux; cmd='sux -p "$PRIV" "$COMMAND"';;
sudo) suname=sudo;cmd='sudo -u "$PRIV" "$COMMAND"';;
*) suname=su; cmd='su -p "$PRIV" -c "$COMMAND"';;
esac
txt=$(eval_gettext 'Using $suname...\nEnter $PRIV passwd:\n')
echo -e "${txt}"
while ! eval $cmd; do
GT_Y=$(gettext 'Y')
GT_y=$(gettext 'y')
GT_N=$(gettext 'N')
GT_n=$(gettext 'n')
txt=$(gettext 'Incorrect password or command failed. Try again? (y/n)')
echo -e "${txt}"
read ans
if test "$ans" != "${GT_y}" -a "$ans" != "${GT_Y}"; then
exit 1
fi
done;;
X11)
if test -z "$SU_TO_ROOT_X"; then
if which gksu >/dev/null 2>&1 ; then
if test "X$KDE_FULL_SESSION" = "Xtrue" \
&& which kdesu >/dev/null 2>&1 ; then
SU_TO_ROOT_X=kdesu
else
SU_TO_ROOT_X=gksu
fi;
elif which kdesu >/dev/null 2>&1 ; then
SU_TO_ROOT_X=kdesu
elif which sux >/dev/null 2>&1 ; then
SU_TO_ROOT_X=sux
else
SU_TO_ROOT_X=su-to-root
fi
fi
case $SU_TO_ROOT_X in
gksu) gksu -u "$PRIV" "$COMMAND";;
kdesu) kdesu -u "$PRIV" "$COMMAND";;
sux) env SU_TO_ROOT_SU=sux \
x-terminal-emulator -e su-to-root -p "$PRIV" -c "$COMMAND";;
# As a last resort, open a new x-terminal-emulator and prompt for the password
# Do not use -X here!
*) x-terminal-emulator -e su-to-root -p "$PRIV" -c "$COMMAND";;
esac;;
esac
fi
----8<------------------------------------------------------------------
Thanks, Greetings and nice Day
Michelle Konzack
Systemadministrator
Tamay Dogan Network
Debian GNU/Linux Consultant
--
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
Michelle Konzack Apt. 917 ICQ #328449886
50, rue de Soultz MSN LinuxMichi
0033/6/61925193 67100 Strasbourg/France IRC #Debian (irc.icq.com)
signature.pgp
Description: Digital signature

