---
Это приложение написано Stephane Chazelas, и дополнено Bruno Haible, ведущим разработчиком GNU gettext.
Приложение G. История команд
Командная оболочка Bash предоставляет в распоряжение пользователя инструментарий командной строки, позволяющий управлять историей команд. История команд -- это, прежде всего, очень удобный инструмент, сокращающий ручной ввод.
История команд Bash:
1. history
2. fc
bash$
history
1 mount /mnt/cdrom
2 cd /mnt/cdrom
3 ls
...
Внутренние переменные Bash, связанные с историей команд:
1. $HISTCMD
2. $HISTCONTROL
3. $HISTIGNORE
4. $HISTFILE
5. $HISTFILESIZE
6. $HISTSIZE
7. !!
8. !$
9. !#
10. !N
11. !-N
12. !STRING
13. !?STRING?
14. ^STRING^string^
К сожалению, инструменты истории команд, в Bash, совершенно бесполезны в сценариях.
#!/bin/bash
# history. sh
# Попытка воспользоваться 'историей' команд в сценарии.
history
# На экран ничего не выводится.
# История команд не работает в сценариях.
bash$
./history. sh
(ничего не выводится)
Приложение H. Пример файла. bashrc
Файл ~/.bashrc определяет поведение командной оболочки. Внимательное изучение этого примера поможет вам значительно продвинуться в понимании Bash.
Emmanuel Rouat представил следующий, очень сложный, файл. bashrc, написанный для операционной системы Linux. Предложения и замечания приветствуются.
Внимательно изучите этот файл. Отдельные участки этого файла вы свободно можете использовать в своем собственном. bashrc или, даже в своих сценариях!
Пример H-1. Пример файла .bashrc
#===============================================================
#
# ЛИЧНЫЙ ФАЙЛ $HOME/.bashrc для bash-2.05a (или выше)
#
# Время последней модификации: Втр Апр 15 20:32:34 CEST 2003
#
# Этот файл содержит настройки интерактивной командной оболочки.
# Здесь размещены определения псевдонимов, функций
# и других элементов Bash, таких как prompt (приглашение к вводу).
#
# Изначально, этот файл был создан в операционной системе Solaris,
# но позднее был переделан под Redhat
# --> Модифицирован под Linux.
# Большая часть кода, который находится здесь, была взята из
# Usenet (или Интернет).
# Этот файл содержит слишком много определений -- помните, это всего лишь пример.
#
#
#===============================================================
# --> Комментарии, добавленные автором HOWTO.
# --> И дополнены автором сценария Emmanuel Rouat :-)
#--
# Глобальные определения
#--
if [ - f /etc/bashrc ]; then
. /etc/bashrc # --> Прочитать настройки из /etc/bashrc, если таковой имеется.
fi
#------
# Настройка переменной $DISPLAY (если еще не установлена)
# Это срабатывает под linux - в вашем случае все может быть по другому....
# Проблема в том, что различные типы терминалов
# дают разные ответы на запрос 'who am i'......
# я не нашел 'универсального' метода
#------
function get_xserver ()
{
case $TERM in
xterm )
XSERVER=$(who am i | awk '{print $NF}' | tr - d ')''(' )
XSERVER=${XSERVER%%:*}
;;
aterm | rxvt)
# добавьте здесь свой код.....
;;
esac
}
if [ - z ${DISPLAY:=""} ]; then
get_xserver
if [[ - z ${XSERVER} || ${XSERVER} == $(hostname) || ${XSERVER} == "unix" ]]; then
DISPLAY=":0.0" # для локального хоста
else
DISPLAY=${XSERVER}:0.0 # для удаленного хоста
fi
fi
export DISPLAY
#----
# Некоторые настройки
#----
ulimit - S - c 0 # Запрет на создание файлов coredump
set - o notify
set - o noclobber
set - o ignoreeof
set - o nounset
#set - o xtrace # полезно для отладки
# Разрешающие настройки:
shopt - s cdspell
shopt - s cdable_vars
shopt - s checkhash
shopt - s checkwinsize
shopt - s mailwarn
shopt - s sourcepath
shopt - s no_empty_cmd_completion # только для bash>=2.04
shopt - s cmdhist
shopt - s histappend histreedit histverify
shopt - s extglob
# Запрещающие настройки:
shopt - u mailwarn
unset MAILCHECK # Я не желаю, чтобы командная оболочка сообщала мне о прибытии почты
export TIMEFORMAT=$'\nreal %3R\tuser %3U\tsys %3S\tpcpu %P\n'
export HISTIGNORE="&:bg:fg:ll:h"
export HOSTFILE=$HOME/.hosts # Поместить список удаленных хостов в файл ~/.hosts
#-
# Greeting, motd etc...
#-
# Для начала определить некоторые цвета:
red='\e[0;31m'
RED='\e[1;31m'
blue='\e[0;34m'
BLUE='\e[1;34m'
cyan='\e[0;36m'
CYAN='\e[1;36m'
NC='\e[0m' # No Color (нет цвета)
# --> Прекрасно. Имеет тот же эффект, что и "ansi. sys" в DOS.
# Лучше выглядит на черном фоне.....
echo - e "${CYAN}This is BASH ${RED}${BASH_VERSION%.*}${CYAN} - DISPLAY on ${RED}$DISPLAY${NC}\n"
date
if [ - x /usr/games/fortune ]; then
/usr/games/fortune - s # сделает наш день более интересным.... :-)
fi
function _exit() # функция, запускающаяся при выходе из оболочки
{
echo - e "${RED}Аста ла виста, бэби ${NC}"
}
trap _exit EXIT
#----
# Prompt
#----
if [[ "${DISPLAY#$HOST}" != ":0.0" && "${DISPLAY}" != ":0" ]]; then
HILIT=${red} # на удаленной системе: prompt будет частично красным
else
HILIT=${cyan} # на локальной системе: prompt будет частично циановым
fi
# --> Замените \W на \w в функциях ниже
#+ --> чтобы видеть в оболочке полный путь к текущему каталогу.
function fastprompt()
{
unset PROMPT_COMMAND
case $TERM in
*term | rxvt )
PS1="${HILIT}[\h]$NC \W > \[\033]0;\${TERM} [\u@\h] \w\007\]" ;;
linux )
PS1="${HILIT}[\h]$NC \W > " ;;
*)
PS1="[\h] \W > " ;;
esac
}
function powerprompt()
{
_powerprompt()
{
LOAD=$(uptime|sed - e "s/.*: \([^,]*\).*/\1/" - e "s/ //g")
}
PROMPT_COMMAND=_powerprompt
case $TERM in
*term | rxvt )
PS1="${HILIT}[\A \$LOAD]$NC\n[\h \#] \W > \[\033]0;\${TERM} [\u@\h] \w\007\]" ;;
linux )
PS1="${HILIT}[\A - \$LOAD]$NC\n[\h \#] \w > " ;;
* )
PS1="[\A - \$LOAD]\n[\h \#] \w > " ;;
esac
}
powerprompt # это prompt по-умолчанию - может работать довольно медленно
# Если это так, то используйте fastprompt....
#===============================================================
#
# ПСЕВДОНИМЫ И ФУНКЦИИ
#
# Возможно некоторые из функций, приведенных здесь, окажутся для вас слишком большими,
# но на моей рабочей станции установлено 512Mb ОЗУ, так что.....
# Если пожелаете уменьшить размер этого файла, то можете оформить эти функции
# в виде отдельных сценариев.
#
# Большинство функций были взяты, почти без переделки, из примеров
# к bash-2.04.
#
#===============================================================
#
# Псевдонимы
#
alias rm='rm - i'
alias cp='cp - i'
alias mv='mv - i'
# -> Предотвращает случайное удаление файлов.
alias mkdir='mkdir - p'
alias h='history'
alias j='jobs - l'
alias r='rlogin'
alias which='type - all'
alias..='cd..'
alias path='echo - e ${PATH//:/\\n}'
alias print='/usr/bin/lp - o nobanner - d $LPDEST' # Предполагается, что LPDEST определен
alias pjet='enscript - h - G - fCourier9 - d $LPDEST' # Печать через enscript
alias background='xv - root - quit - max - rmode 5' # Положить картинку в качестве фона
alias du='du - kh'
alias df='df - kTh'
# Различные варианты 'ls' (предполагается, что установлена GNU-версия ls)
alias la='ls - Al' # показать скрытые файлы
alias ls='ls - hF --color' # выделить различные типы файлов цветом
alias lx='ls - lXB' # сортировка по расширению
alias lk='ls - lSr' # сортировка по размеру
alias lc='ls - lcr' # сортировка по времени изменения
alias lu='ls - lur' # сортировка по времени последнего обращения
alias lr='ls - lR' # рекурсивный обход подкаталогов
alias lt='ls - ltr' # сортировка по дате
alias lm='ls - al |more' # вывод через 'more'
alias tree='tree - Csu' # альтернатива 'ls'
# подготовка 'less'
alias more='less'
export PAGER=less
export LESSCHARSET='latin1'
export LESSOPEN='|/usr/bin/lesspipe. sh %s 2>&-' # если существует lesspipe. sh
export LESS='-i - N - w - z-4 - g - e - M - X - F - R - P%t? f%f \
:stdin.?pb%pb\%:?lbLine %lb:?bbByte %bb:-...'
# проверка правописания - настоятельно рекомендую :-)
alias xs='cd'
alias vf='cd'
alias moer='more'
alias moew='more'
alias kk='ll'
#-----
# добавим немножко "приятностей"
#-----
function xtitle ()
{
case "$TERM" in
*term | rxvt)
echo - n - e "\033]0;$*\007" ;;
*)
;;
esac
}
# псевдонимы...
alias top='xtitle Processes on $HOST && top'
alias make='xtitle Making $(basename $PWD) ; make'
alias ncftp="xtitle ncFTP ; ncftp"
# .. и функции
function man ()
{
for i ; do
xtitle The $(basename $1|tr - d.[:digit:]) manual
command man - F - a "$i"
done
}
function ll(){ ls - l "$@"| egrep "^d" ; ls - lXB "$@" 2>&-| egrep - v "^d|total "; }
function te() # "обертка" вокруг xemacs/gnuserv
{
if [ "$(gnuclient - batch - eval t 2>&-)" == "t" ]; then
gnuclient - q "$@";
else
( xemacs "$@" &);
fi
}
#--
# Функции для работы с файлами и строками:
#--
# Поиск файла по шаблону:
function ff() { find. - type f - iname '*'$*'*' - ls ; }
# Поиск файла по шаблону в $1 и запуск команды в $2 с ним:
function fe() { find. - type f - iname '*'$1'*' - exec "${2:-file}" {} \; ; }
# поиск строки по файлам:
function fstr()
{
OPTIND=1
local case=""
local usage="fstr: поиск строки в файлах.
Порядок использования: fstr [-i] \"шаблон\" [\"шаблон_имени_файла\"] "
while getopts :it opt
do
case "$opt" in
i) case="-i " ;;
*) echo "$usage"; return;;
esac
done
shift $(( $OPTIND - 1 ))
if [ "$#" - lt 1 ]; then
echo "$usage"
return;
fi
local SMSO=$(tput smso)
local RMSO=$(tput rmso)
find. - type f - name "${2:-*}" - print0 | xargs -0 grep - sn ${case} "$1" 2>&- | \
sed "s/$1/${SMSO}\0${RMSO}/gI" | more
}
function cuttail() # удалить последние n строк в файле, по-умолчанию 10
{
nlines=${2:-10}
sed - n - e :a - e "1,${nlines}!{P;N;D;};N;ba" $1
}
function lowercase() # перевести имя файла в нижний регистр
{
for file ; do
filename=${file##*/}
case "$filename" in
*/*) dirname==${file%/*} ;;
*) dirname=.;;
esac
nf=$(echo $filename | tr A-Z a-z)
newname="${dirname}/${nf}"
if [ "$nf" != "$filename" ]; then
mv "$file" "$newname"
echo "lowercase: $file --> $newname"
else
echo "lowercase: имя файла $file не было изменено."
fi
done
}
function swap() # меняет 2 файла местами
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
}
#--
# Функции для работы с процессами/системой:
#--
function my_ps() { ps $@ - u $USER - o pid,%cpu,%mem, bsdtime, command ; }
function pp() { my_ps f | awk '!/awk/ && $0~var' var=${1:-".*"} ; }
# Эта функция является грубым аналогом 'killall' в linux
# но не эквивалентна (насколько я знаю) 'killall' в Solaris
function killps() # "Прибить" процесс по его имени
{
local pid pname sig="-TERM" # сигнал, рассылаемый по-умолчанию
if [ "$#" - lt 1 ] || [ "$#" - gt 2 ]; then
echo "Порядок использования: killps [-SIGNAL] шаблон_имени_процесса"
return;
fi
if [ $# = 2 ]; then sig=$1 ; fi
for pid in $(my_ps| awk '!/awk/ && $0~pat { print $1 }' pat=${!#} ) ; do
pname=$(my_ps | awk '$1~var { print $5 }' var=$pid )
if ask "Послать сигнал $sig процессу $pid <$pname>?"
then kill $sig $pid
fi
done
}
function my_ip() # IP адрес
{
MY_IP=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed - e s/addr://)
MY_ISP=$(/sbin/ifconfig ppp0 | awk '/P-t-P/ { print $3 } ' | sed - e s/P-t-P://)
}
function ii() # Дополнительные сведения о системе
{
echo - e "\nВы находитесь на ${RED}$HOST"
echo - e "\nДополнительная информация:$NC " ; uname - a
echo - e "\n${RED}В системе работают пользователи:$NC " ; w - h
echo - e "\n${RED}Дата:$NC " ; date
echo - e "\n${RED}Время, прошедшее с момента последней перезагрузки :$NC " ; uptime
echo - e "\n${RED}Память :$NC " ; free
my_ip 2>&- ;
echo - e "\n${RED}IP адрес:$NC" ; echo ${MY_IP:-"Соединение не установлено"}
echo - e "\n${RED}Адрес провайдера (ISP):$NC" ; echo ${MY_ISP:-"Соединение не установлено"}
echo
}
# Разные утилиты:
function repeat() # повторить команду n раз
{
local i max
max=$1; shift;
for ((i=1; i <= max ; i++)); do # --> C-подобный синтаксис
eval "$@";
done
}
function ask()
{
echo - n "$@" '[y/n] ' ; read ans
case "$ans" in
y*|Y*) return 0 ;;
*) return 1 ;;
esac
}
#=========================================================================
#
# ПРОГРАММНЫЕ ДОПОЛНЕНИЯ - ТОЛЬКО НАЧИНАЯ С ВЕРСИИ BASH-2.04
# Большая часть дополнений взята из докуентации к bash 2.05 и из
# пакета 'Bash completion' (http://www. caliban. org/bash/index. shtml#completion)
# автор -- Ian McDonalds
# Фактически, у вас должен стоять bash-2.05a
#
#=========================================================================
if [ "${BASH_VERSION%.*}" \< "2.05" ]; then
echo "Вам необходимо обновиться до версии 2.05"
return
fi
shopt - s extglob # необходимо
set +o nounset # иначе некоторые дополнения не будут работать
complete - A hostname rsh rcp telnet rlogin r ftp ping disk
complete - A export printenv
complete - A variable export local readonly unset
complete - A enabled builtin
complete - A alias alias unalias
complete - A function function
complete - A user su mail finger
complete - A helptopic help
complete - A shopt shopt
complete - A stopped - P '%' bg
complete - A job - P '%' fg jobs disown
complete - A directory mkdir rmdir
complete - A directory - o default cd
# Архивация
complete - f - o default - X '*.+(zip|ZIP)' zip
complete - f - o default - X '!*.+(zip|ZIP)' unzip
complete - f - o default - X '*.+(z|Z)' compress
complete - f - o default - X '!*.+(z|Z)' uncompress
complete - f - o default - X '*.+(gz|GZ)' gzip
complete - f - o default - X '!*.+(gz|GZ)' gunzip
complete - f - o default - X '*.+(bz2|BZ2)' bzip2
complete - f - o default - X '!*.+(bz2|BZ2)' bunzip2
# Postscript, pdf, dvi.....
complete - f - o default - X '!*.ps' gs ghostview ps2pdf ps2ascii
complete - f - o default - X '!*.dvi' dvips dvipdf xdvi dviselect dvitype
complete - f - o default - X '!*.pdf' acroread pdf2ps
complete - f - o default - X '!*.+(pdf|ps)' gv
complete - f - o default - X '!*.texi*' makeinfo texi2dvi texi2html texi2pdf
complete - f - o default - X '!*.tex' tex latex slitex
complete - f - o default - X '!*.lyx' lyx
complete - f - o default - X '!*.+(htm*|HTM*)' lynx html2ps
# Multimedia
complete - f - o default - X '!*.+(jp*g|gif|xpm|png|bmp)' xv gimp
complete - f - o default - X '!*.+(mp3|MP3)' mpg123 mpg321
complete - f - o default - X '!*.+(ogg|OGG)' ogg123
complete - f - o default - X '!*.pl' perl perl5
# Эти 'универсальные' дополнения работают тогда, когда команды вызываются
# с, так называемыми, 'длинными ключами', например: 'ls --all' вместо 'ls - a'
_get_longopts ()
{
$1 --help | sed - e '/--/!d' - e 's/.*--\([^[:space:].,]*\).*/--\1/'| \
grep ^"$2" |sort - u ;
}
_longopts_func ()
{
case "${2:-*}" in
-*) ;;
*) return ;;
esac
case "$1" in
\~*) eval cmd="$1" ;;
*) cmd="$1" ;;
esac
COMPREPLY=( $(_get_longopts ${1} ${2} ) )
}
complete - o default - F _longopts_func configure bash
complete - o default - F _longopts_func wget id info a2ps ls recode
_make_targets ()
{
local mdef makef gcmd cur prev i
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
# Если аргумент prev это - f, то вернуть возможные варианты имен файлов.
# будем великодушны и вернем несколько вариантов
# `makefile Makefile *.mk'
case "$prev" in
-*f) COMPREPLY=( $(compgen - f $cur ) ); return 0;;
esac
# Если запрошены возможные ключи, то вернуть ключи posix
case "$cur" in
-) COMPREPLY=(-e - f - i - k - n - p - q - r - S - s - t); return 0;;
esac
# попробовать передать make `makefile' перед тем как попробовать передать `Makefile'
if [ - f makefile ]; then
mdef=makefile
elif [ - f Makefile ]; then
mdef=Makefile
else
mdef=*.mk
fi
# прежде чем просмотреть "цели", убедиться, что имя makefile было задано
# ключом - f
for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do
if [[ ${COMP_WORDS[i]} == -*f ]]; then
eval makef=${COMP_WORDS[i+1]}
break
fi
done
[ - z "$makef" ] && makef=$mdef
# Если задан шаблон поиска, то ограничиться
# этим шаблоном
if [ - n "$2" ]; then gcmd='grep "^$2"' ; else gcmd=cat ; fi
# если мы не желаем использовать *.mk, то необходимо убрать cat и использовать
# test - f $makef с перенаправлением ввода
COMPREPLY=( $(cat $makef 2>/dev/null | awk 'BEGIN {FS=":"} /^[^.# ][^=]*:/ {print $1}' | tr - s ' ' '\012' | sort - u | eval $gcmd ) )
}
complete - F _make_targets - X '+($*|*.[cho])' make gmake pmake
# cvs(1) completion
_cvs ()
{
local cur prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
if [ $COMP_CWORD - eq 1 ] || [ "${prev:0:1}" = "-" ]; then
COMPREPLY=( $( compgen - W 'add admin checkout commit diff \
export history import log rdiff release remove rtag status \
tag update' $cur ))
else
COMPREPLY=( $( compgen - f $cur ))
fi
return 0
}
complete - F _cvs cvs
_killall ()
{
local cur prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
# получить список процессов
COMPREPLY=( $( /usr/bin/ps - u $USER - o comm | \
sed - e '1,1d' - e 's#[]\[]##g' - e 's#^.*/##'| \
awk '{if ($0 ~ /^'$cur'/) print $0}' ))
return 0
}
complete - F _killall killall killps
# Функция обработки мета-команд
# В настоящее время недостаточно отказоустойчива (например, mount и umount
# обрабатываются некорректно), но все еще актуальна. Автор Ian McDonald, изменена мной.
_my_command()
{
local cur func cline cspec
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
if [ $COMP_CWORD = 1 ]; then
COMPREPLY=( $( compgen - c $cur ) )
elif complete - p ${COMP_WORDS[1]} &>/dev/null; then
cspec=$( complete - p ${COMP_WORDS[1]} )
if [ "${cspec%%-F *}" != "${cspec}" ]; then
# complete - F <function>
#
# COMP_CWORD and COMP_WORDS() доступны на запись,
# так что мы можем установить их перед тем,
# как передать их дальше
# уменьшить на 1 текущий номер лексемы
COMP_CWORD=$(( $COMP_CWORD - 1 ))
# получить имя функции
func=${cspec#*-F }
func=${func%% *}
# получить командную строку, исключив первую команду
cline="${COMP_LINE#$1 }"
# разбить на лексемы и поместить в массив
COMP_WORDS=( $cline )
$func $cline
elif [ "${cspec#*-[abcdefgjkvu]}" != "" ]; then
# complete -[abcdefgjkvu]
#func=$( echo $cspec | sed - e 's/^.*\(-[abcdefgjkvu]\).*$/\1/' )
func=$( echo $cspec | sed - e 's/^complete//' - e 's/[^ ]*$//' )
COMPREPLY=( $( eval compgen $func $cur ) )
elif [ "${cspec#*-A}" != "$cspec" ]; then
# complete - A <type>
func=${cspec#*-A }
func=${func%% *}
COMPREPLY=( $( compgen - A $func $cur ) )
fi
else
COMPREPLY=( $( compgen - f $cur ) )
fi
}
complete - o default - F _my_command nohup exec eval trace truss strace sotruss gdb
complete - o default - F _my_command command type which man nice
# Локальные переменные:
# mode:shell-script
# sh-shell:bash
# Конец:
Приложение I. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
Большое число программистов начинало изучать скриптовые языки на PC, работающих под управлением DOS. Даже на этом "калеке" удавалось создавать неплохие сценарии, хотя это и требовало значительных усилий. Иногда еще возникает потребность в переносе пекетных файлов DOS на платформу UNIX, в виде сценариев командной оболочки. Обычно это не сложно, поскольку набор операторов, доступных в DOS, представляет из себя ограниченное подмножество эквивалентных команд, доступных в командной оболочке.
Таблица I-1. Ключевые слова/переменные/операторы пакетных файлов DOS и их аналоги командной оболочки
Операторы пакетных файлов | Эквивалентные команды в UNIX | Описание |
% | $ | префикс аргументов командной строки |
/ | - | признак ключа (опции) |
\ | / | разделитель имен каталогов в пути |
== | = | (равно) сравнение строк |
!==! | != | (не равно) сравнение строк |
| | | | конвейер (канал) |
@ | set +v | не выводить текущую команду |
* | * | "шаблонный символ" в имени файла |
> | > | перенаправление (с удалением существующего файла) |
>> | >> | перенаправление (с добавлением в конец существующего файла) |
< | < | перенаправление ввода stdin |
%VAR% | $VAR | переменная окружения |
REM | # | комментарий |
NOT | ! | отрицание последующего условия |
NUL | /dev/null | "черная дыра" для того, чтобы "спрятать" вывод команды |
ECHO | echo | вывод (в Bash имеет большое число опций) |
ECHO. | echo | вывод пустой строки |
ECHO OFF | set +v | не выводить последующие команды |
FOR %%VAR IN (LIST) DO | for var in [list]; do | цикл "for" |
:LABEL | эквивалент отсутствует (нет необходимости) | метка |
GOTO | эквивалент отсутствует (используйте функции) | переход по заданной метке |
PAUSE | sleep | пауза, или ожидание, в течение заданного времени |
CHOICE | case или select | выбор из меню |
IF | if | условный оператор if |
IF EXIST FILENAME | if [ - e filename ] | проверка существования файла |
IF!%N==! | if [ - z "$N" ] | Проверка: параметр "N" отсутствует |
CALL | source или. (оператор "точка") | "подключение" другого сценария |
COMMAND /C | source или. (оператор "точка") | "подключение" другого сценария (то же, что и CALL) |
SET | export | установить переменную окружения |
SHIFT | shift | сдвиг списка аргументов уомандной строки влево |
SGN | -lt или - gt | знак (целого числа) |
ERRORLEVEL | $? | код завершения |
CON | stdin | "консоль" (stdin) |
PRN | /dev/lp0 | устройство принтера |
LPT1 | /dev/lp0 | устройство принтера |
COM1 | /dev/ttyS0 | первый последовательный порт |
Пакетные файлы обычно содержат вызовы команд DOS. Они должны быть заменены эквивалентными командами UNIX.
Таблица I-2. Команды DOS и их эквиваленты в UNIX
Команды DOS | Эувивалент в UNIX | Описание |
ASSIGN | ln | ссылка на файл или каталог |
ATTRIB | chmod | изменить атрибуты файла (права доступа) |
CD | cd | сменить каталог |
CHDIR | cd | сменить каталог |
CLS | clear | очистить экран |
COMP | diff, comm, cmp | сравнить файлы |
COPY | cp | скопировать файл |
Ctl-C | Ctl-C | прервать исполнение сценария |
Ctl-Z | Ctl-D | EOF (конец-файла) |
DEL | rm | удалить файл(ы) |
DELTREE | rm - rf | удалить каталог с подкаталогами |
DIR | ls - l | вывести содержимое каталога |
ERASE | rm | удалить файл(ы) |
EXIT | exit | завершить текущий процесс |
FC | comm, cmp | сравнить файлы |
FIND | grep | найти строку в файлах |
MD | mkdir | создать каталог |
MKDIR | mkdir | создать каталог |
MORE | more | постраничный вывод |
MOVE | mv | переместить |
PATH | $PATH | путь поиска исполняемых файлов |
REN | mv | переименовать (переместить) |
RENAME | mv | переименовать (переместить) |
RD | rmdir | удалить каталог |
RMDIR | rmdir | удалить каталог |
SORT | sort | отсортировать файл |
TIME | date | вывести системное время |
TYPE | cat | вывести содержимое файла на stdout |
XCOPY | cp | (расширенная команда) скопировать файл |
| Фактически, команды и операторы командной оболочки UNIX имеют огромное количество дополнительных опций, расширяющих их функциональность, по сравнению с их эквивалентами в DOS. В большинстве своем, пакетные файлы DOS предполагают наличие вспомогательных утилит, таких как ("увечный" аналог UNIX-вого read). DOS поддерживает крайне ограниченный набор шаблонных символов, учавствующих в операциях подстановки имен файлов, распознавая только два символа -- * и?. | |
Преобразование пакетных файлов DOS в сценарии командной оболочки, обычно не вызывает затруднений, а результат такого преобразования читается гораздо лучше, чем оригинал.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |


