Замечание: оболочка Korn /bin/ksh устанавливается инсталляцией pdksh*.rpm с компакт-диска дистрибутива Linux
Сохраните этот файл как текст и выполните для него "chmod a+rx".
#!/bin/ksh
# CVS-программа supdate
# Программа для обновления файла из CVS в режиме чтения/записи
# Имя каждого файла составляется из 3 частей -- домашнего каталога,
# подкаталога и имени файла. Полный путь -- $HOME/$subdir/$fname
# В CVS сохраняется такая же структура каталогов (с помощью переменной
# $subdir), поэтому в CVS мы будем иметь $CVSROOT/$subdir/$fname
# В данной программе эти 4 переменные $HOME, $CVSROOT, $subdir и $fname
# играют важную роль. Примеры их значений:
# HOME=/home/aldev, subdir=myproject/src CVSROOT=/home/cvsroot
# и fname=foo.cpp
# Предупреждение: заключите значения переменных, содержащих пробелы
# в двойные кавычки: "$HOME/$subdir", если subdir равен "some foo.cpp"
cmdname=`basename $0`
if [ $# -lt 1 ]; then
print "\nВызов: $cmdname <файл>"
exit
fi
# Двойные кавычки для защиты пробелов в $1
tmpaa="$1"
# Проверка существования файла...
if [ $# -gt 0 -a -f $tmpaa ]; then
user_perms=" "
group_perms=" "
other_perms=" "
user_perms=`ls -l $tmpaa | awk '{print $tmpaa }' | cut -b3-3 `
group_perms=`ls -l $tmpaa | awk '{print $tmpaa }' | cut -b6-6 `
other_perms=`ls -l $tmpaa | awk '{print $tmpaa }' | cut -b9-9 `
if [ "$user_perms" = "w" -o "$group_perms" = "w" \
-o "$other_perms" = "w" ]; then
while :
do
print "\n$cmdname сделает резервную копию Вашего рабочего файла "
print "$tmpaa в $tmpaa.supdate_bak перед выполнением слияния."
print "Вы уверены в желании объединения изменений из"
print -n "CVS-репозитория с Вашим рабочим файлом? <y/n> [n]: "
read ans
if [ "$ans" = "y" -o "$ans" = "Y" ]; then
if [ -f $tmpaa.supdate_bak ]; then
print "\nВнимание: файл $tmpaa.supdate_bak уже существует!!"
print "Пожалуйста просмотрите файл $tmpaa.supdate_bak и удалите его,"
print "а затем повторно выполните эту команду $cmdname "
print "Завершение $cmdname ...."
exit
else
cp $tmpaa $tmpaa.supdate_bak
break
fi
elif [ "$ans" = "n" -o "$ans" = "N" -o "$ans" = "" -o "$ans" = " " ]; then
exit
fi
done
fi
fi
if [ -d $tmpaa ]; then
print "\nОбновление каталога недоступно, потому что CVS update"
print "объединяет изменения из репозитория с Вашим рабочим каталогом."
print "Поэтому укажите файл для обновления, как показано ниже: "
print " Вызов: $cmdname <файл>"
exit
# cvs update
else
cvs update $tmpaa
fi
print "\n$cmdname удачно выполнен."
print "\n\nСделана резервная копия исходного файла как $tmpaa.supdate_bak"
print "\nПоэтому Ваш исходный файл СОХРАНЕН в $tmpaa.supdate_bak"
print "\n\n"
#print "\nTip (Usage): $cmdname <filename/directory name>\n" |