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-shelclass="underline" bash
# Конец:
Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
Большое число программистов начинало изучать скриптовые языки на PC, работающих под управлением DOS. Даже на этом "калеке" удавалось создавать неплохие сценарии, хотя это и требовало значительных усилий. Иногда еще возникает потребность в переносе пекетных файлов DOS на платформу UNIX, в виде сценариев командной оболочки. Обычно это не сложно, поскольку набор операторов, доступных в DOS, представляет из себя ограниченное подмножество эквивалентных команд, доступных в командной оболочке.
Таблица H-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.
Таблица H-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 | (расширенная команда) скопировать файл |