...Умеет сам себя перекодировать при необходимости! На самом деле самоправящиеся скрипты - довольно неплохая технология в условиях современного зоопарка кодировок.
#!/bin/bash
#
# chkconfig: - 89 14
#
# description: NeTAMS is a traffic accounting daemon
FileWasSavedInENC="koi8-r"
slf="`basename $0`"
# Source function library.
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
NETAMS_CONF="/etc/netams.cfg"
NETAMS_PRG="netams"
NETAMS_BIN="/usr/local/sbin/netams"
NETAMSCTL_BIN="/usr/local/sbin/netamsctl"
NETAMS_ARGS="-lf $NETAMS_CONF"
NETAMS_LOCK="/var/lock/subsys/netams"
NETAMS_PID="/var/run/netams.pid"
CUR_LOCALE="`locale | sed -nr 's/^\s*LANG\s*=\s*(.+)\s*(#.*)?$/\1/p'`"
case "${CUR_LOCALE%%.*}" in
"ru_RU")
moALREADY_RUNNING="Похоже, что NeTAMS уже запущен..."
CUR_ENC="`echo ${CUR_LOCALE#*.} | tr 'A-Z' 'a-z'`"
if [ "$CUR_ENC" != "$FileWasSavedInENC" ]; then
iconv2enc=
[ -z "${CUR_ENC}" ] || iconv2enc="-t $CUR_ENC"
iconv -f $FileWasSavedInENC $iconv2enc < $0 | sed -r "s%(\ "/tmp/$slf.$$"
mv -f "/tmp/$slf.$$" "$0" && chmod +x "$0"
$0 $@
exit $?
fi
;;
*) moALREADY_RUNNING="NeTAMS seems to be already running..." ;;
esac
moALREADY_RUNNING="$NETAMS_PRG: $moALREADY_RUNNING"
RETVAL=0
prog="netams"
start () {
if [ ! -f $NETAMS_PID ]; then
echo -n $"Starting $prog: "
NETAMS=$NETAMS_BIN\ $NETAMS_ARGS
daemon $NETAMS; RETVAL=$?; echo
[ $RETVAL -eq 0 ] && touch $NETAMS_LOCK
else
echo $moALREADY_RUNNING >&2
RETVAL=1
fi
return $RETVAL
}
stop () {
echo -n $"Stopping $prog: "
$NETAMSCTL_BIN "shutdown" >/dev/null 2>&1 && rm -f $NETAMS_LOCK
RETVAL=$?
[ $RETVAL -eq 0 ] && success || failure
echo
return $RETVAL
}
status () {
status $NETAMS_BIN
[ $? -ne 0 ] && RETVAL=$? || RETVAL=-1
return $RETVAL
}
on_exit () {
if [ $RETVAL -eq 0 ]; then
success
elif [ "$RETVAL" != "-1" ]; then
failure
fi
return 0
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; start ;;
status) status ;;
*) echo "Usage: $NETAMS_PRG (start|stop|restart|status)" >&2 ;;
esac
exit $RETVAL
Re: SysV Init-скрипт для трафикосчиталки NeTAMS #1
В данном случае автоматическая перекодировка, возможно, и не слишком актуальна, поскольку в этом скрипте пока что сообщение на русском языке всего одно (ну и завуалированное "Запускается netams: " (спасибо LK за то, что он подсказал мне в своё время, как это реализуется), но оно [сообщение] вынесено в отдельный файл, используемый всеми стартовыми скриптами). Вообще же если не хочется привязываться к реализации интернационализации в том или ином дистрибутиве, решение на базе явного указания в скрипте кодировки, в которой он был сохранён, является наимболее простым и логичным (в особенности если дополнить соотв. функцией автоперекодировки файл /etc/init.d/functions)
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"