s/:/ /g'`
do
if test -f $i/$1 # use test -x if you can
then
echo $i/$1
exit 0 # found it
fi
done
exit 1 # not found
# which cmd: which cmd in PATH is executed, version 1
case $# in
0) echo 'Usage: which command' 1>&2; exit 2
esac
for i in `echo $PATH | sed 's/^:/.:/
s/::/:.:/g
s/:$/:./
s/:/ /g'`
do
if test -f $i/$1 # use test -x if you can
then
echo $i/$1
exit 0 # found it
fi
done
exit 1 # not found
@@@ Fri Oct 14 14:21:11 EDT 1983 original version
# which cmd: which cmd in PATH is executed, final version
opath=$PATH PATH=/bin:/usr/bin
case $# in
0) echo 'Usage: which command' 1>&2; exit 2
esac
for i in `echo $opath | sed 's/^:/.:/
s/::/:.:/g
s/:$/:./
s/:/ /g'`
do
if test -f $i/$1 # this is /bin/test
then # or /usr/bin/test only
echo $i/$1
exit 0 # found it
fi
done
exit 1 # not found
awk ' { for (i = 1; i <= NF; i++) num[$i]++ }
END {for (word in num) print word, num[word] }
' $*
# zap pattern: kill all processes matching pattern
# BUG in this version
PATH=/bin:/usr/bin
case $# in
0) echo 'Usage: zap pattern' 1>&2; exit 1
esac
kill `pick \`ps -ag | grep "$*"\` | awk '{print $1}'`
# zap pat: kill all processes matching pat
# final version
PATH=/bin:/usr/bin
IFS='
' # just a newline
case $1 in
"") echo 'Usage: zap [-2] pattern' 1>&2; exit 1 ;;
-*) SIG=$1; shift
esac
echo ' PID TTY TIME CMD'
kill $SIG `pick \`ps -ag | egrep "$*"|` | awk '{print $1}'`
/* zap: interactive process killer */
#include
#include
char *progname; /* program name for error message */
char *ps = "ps -ag"; /* system dependent */
main(argc, argv)
int argc;
char *argv[];
{
FILE *fin, *popen();
char buf[BUFSIZ];
int pid;
progname = argv[0];
if ((fin = popen(ps, "r")) == NULL) {
fprintf (stderr, "%s: can't run %s\n", progname, ps);
exit(1);
}
fgets(buf, sizeof buf, fin); /* get header line */
fprintf (stderr, "%s", buf);
while (fgets(buf, sizeof buf, fin) != NULL)
if (argc == 1 || strindex(buf, argv[1]) >= 0) {
buf[strlen(buf)-1] = '\0'; /* suppress \n */
fprintf (stderr, "%s? ", buf);
if (ttyin() == 'y') {
sscanf(buf, "%d", &pid);
kill(pid, SIGKILL);
}
}
exit(0);
}
#include "ttyin2.c"
#include "strindex.c"
#include "efopen.c"
Система UNIX представляет собой продукт BELL Laboratories. Слово "UNIX" не акроним: оно перекликается со словом "MULTICS" — названием операционной системы, с которой работали К. Томпсон и Д. Ритчи ранее.
В современных системах такого ограничения нет, длина файла там ограничена в большинстве случаев 255 символами ( прим. редактора )
Порядок, конечно, не строго алфавитный, прописные буквы предшествуют строчным. Чтобы узнать порядок, используемый в программе sort
, см. ascii(7)
.
Эта возможность плохо реализована в shell
. Просмотр файла после ввода каждой команды сказывается на времени работы системы. Кроме того, если вы достаточно долго работаете в редакторе, то не узнаете о новой почте, поскольку не задаете новых команд в начальном интерпретаторе shell
. Лучшим решением была бы проверка через каждые несколько минут, а не после очередной команды. В гл. 5 и 7 будет показано, как реализовать такую проверку получения почты. Третьим решением, хотя и не для всех доступным, может быть извещение, посылаемое самой программой mail
, — она точно "знает", когда появится почта.
В каждом байте файла находится число, достаточно большое, чтобы закодировать изображаемый символ. В большинстве систем UNIX кодировка называется ASCII ("American Standard Code for Information Interchange" — американский стандартный код для обмена информацией), но на некоторых машинах, особенно произведенных фирмой IBM, используется кодировка, называемая EBCDIC ("Extended Binary Coded Decimal Interchange Code" — расширенная двоично закодированная десятичная общая кодировка). Здесь и далее в книге мы будем применять множество символов ASCII; воспользуйтесь командой cat /usr/pub/ascii
или прочтите ascii(7)
, чтобы узнать восьмеричные значения символов.
Существует хороший тест на единообразие системы, предложенный Д. МакИлроем. UNIX легко выдерживает его. Можно ли результат компиляции с Фортрана использовать как входной поток для компилятора с Фортрана? Очень больше число систем не позволяет этого сделать.
Читать дальше
Конец ознакомительного отрывка
Купить книгу