Замечание: оболочка Korn /bin/ksh устанавливается инсталляцией pdksh*.rpm с компакт-диска дистрибутива Linux
Сохраните этот файл как текст и выполните для него "chmod a+rx".
Заметьте, что есть другая Unix-команда с именем slist (список доступных серверов Netware), следует удостовериться, что CVS-скрипт slist встречается раньше другого в Вашей переменной окружения PATH.
#!/bin/ksh
# CVS-программа slist
# Программа перечисления всех отредактированных файлов исходного кода из 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"
# Вызов:
# $ slist (Все файлы и подкаталоги)
# $ slist *.* (Все файлы)
# $ slist * (Все файлы и подкаталоги)
# $ slist ab* (Все файлы, начинающиеся на "ab")
homedir=` echo $HOME | cut -f1 -d' ' `
if [ "$homedir" = "" ]; then
print "\nОшибка: \$HOME не установлен!!\n"
exit
fi
cur_dir=`pwd`
#echo $cur_dir
len=${#homedir}
len=$(($len + 2))
#echo $len
subdir=` echo $cur_dir | cut -b $len-2000 `
#echo "subdir is : " $subdir
# Если файл уже извлечен другим разработчиком...
cvs_root=` echo $CVSROOT | cut -f1 -d' ' `
if [ "$cvs_root" = "" ]; then
print "\nОшибка: \$CVSROOT не установлен!!\n"
exit
fi
# Если текущий каталог не находится в корне CVS, то выход
if [ ! -d $CVSROOT/$subdir ]; then
print "\nКаталог $subdir не существует в $CVSROOT"
exit
fi
#echo "no of params : " $#
#echo "The arg $ 1 is : " $1
#echo "all args : " $@
if [ $# -eq 0 ]; then
tmpbb=` find * -prune -type d `
elif [ $# -eq 1 ]; then
if [ "$1" = "." ]; then
tmpbb=` find * -prune -type d `
else
if [ -d $1 -a ! -d $CVSROOT/$subdir/$1 ]; then
print "\nКаталог $subdir/$1 не существует в $CVSROOT"
exit
fi
tmpbb=$@
fi
else
tmpbb=$@
fi
#echo "The tmpbb is : " $tmpbb
# Теперь удалим все имена каталогов, не существующих в корне CVS
dirnames=""
for ii in $tmpbb ; do
if [ -d $CVSROOT/$subdir/$ii ]; then
dirnames="$dirnames $ii "
fi
done
#echo "The dirnames is : " $dirnames
if [ "$dirnames" != "" ]; then
find $dirnames -type f |
while read ii
do
# Перечислить только те файлы, которые находятся в CVS-системе
if [ -f "$CVSROOT/$subdir/$ii,v" ]; then
#echo "ii is : " $ii
ls -l $ii | grep ^\-rw
fi
done;
fi
# Получить все файлы в текущем каталоге
listfiles=`ls $tmpbb `
find * -prune -type f |
while read ii
do
for jj in $listfiles ; do
if [ "$jj" = "$ii" ]; then
# Перечислить только те файлы, которые находятся в CVS-системе
if [ -f "$CVSROOT/$subdir/$ii,v" ]; then
#echo "ii is : " $ii
ls -l $ii | grep ^\-rw
fi
fi
done
done; |