Искусство программирования на языке сценариев командной оболочки


Программирование на языке сценариев командной оболочки - стр. 229


# До сих пор сценарий исполнялся в обычном, неограниченном режиме.

set -r # set --restricted имеет тот же эффект. echo "==> Переход в ограниченный режим. <=="

echo echo

echo "Попытка сменить текущий каталог в ограниченном режиме." cd .. echo "Текущий каталог остался прежним: `pwd`"

echo echo

echo "\$SHELL = $SHELL" echo "Попытка смены командного интерпретатора в ограниченном режиме." SHELL="/bin/ash" echo echo "\$SHELL= $SHELL"

echo echo

echo "Попытка перенаправления вывода в ограниченном режиме." ls -l /usr/bin > bin.files ls -l bin.files # Попробуем найти файл, который пытались создать.

echo

exit 0

Глава 21. Подстановка процессов

Подстановка процессов -- это аналог подстановки команд. Операция подстановки команд записывает в переменную результат выполнения некоторой команды, например, dir_contents=`ls -al` или xref=$(grep word datafile). Операция подстановки процессов передает вывод одного процесса на ввод другого (другими словами, передает результат выполнения одной команды -- другой).

Шаблон подстановки команды

Внутри круглых скобок

>(command)

<(command)

Таким образом инициируется подстановка процессов. Здесь, для передачи результата работы процесса в круглых скобках, используются файлы /dev/fd/<n>. [49]

Между круглой скобкой и символом "<" или ">", не должно быть пробелов, в противном случае это вызовет сообщение об ошибке.

bash$ echo >(true)

/dev/fd/63

bash$ echo <(true)

/dev/fd/63

Bash создает канал с двумя файловыми дескрипторами, --fIn и fOut--. stdin команды true присоединяется к fOut (dup2(fOut, 0)), затем Bash передает /dev/fd/fIn в качестве аргумента команде echo. В системах, где отсутствуют файлы /dev/fd/<n>, Bash может использовать временные файлы. (Спасибо S.C.)

cat <(ls -l) # То же самое, что и ls -l | cat

sort -k 9 <(ls -l /bin) <(ls -l /usr/bin) <(ls -l /usr/X11R6/bin) # Список файлов в трех основных каталогах 'bin', отсортированный по именам файлов. # Обратите внимание: на вход 'sort' поданы три самостоятельные команды.




- Начало -  - Назад -  - Вперед -