Нажатие Ctrl+R откроет обратный поиск истории. Теперь начните вводить свою команду, это даст первое соответствие. Путем нажатия Ctrl+R снова (и снова) можно циклически повториться через историю.
mysq(Ctrl+R)
Дал бы:
mysqldump --add-drop-table -e -q -n -C -u
Ctrl+R снова:
mysql -u ben.dauphinee -p
Во-первых, обратите внимание, что синтаксис для закрытия 5>&-
или 6<&-
В зависимости от того, читается ли дескриптор файла из записи или из чтения. Кажется, существует опечатка или форматирующий незначительный сбой в том сообщении в блоге.
Вот прокомментированный сценарий.
exec 5>/tmp/foo # open /tmp/foo for writing, on fd 5
exec 6</tmp/bar # open /tmp/bar for reading, on fd 6
cat <&6 | # call cat, with its standard input connected to
# what is currently fd 6, i.e., /tmp/bar
while read a; do #
echo $a >&5 # write to fd 5, i.e., /tmp/foo
done #
Здесь нет никакого закрытия. Поскольку все вводы и выводы идут в то же место в этом простом примере, использование дополнительных дескрипторов файлов не необходимо. Вы могли записать
cat </tmp/bar |
while read a; do
echo $a
done >/tmp/foo
Используя явные дескрипторы файлов становится полезным, когда Вы хотите записать в несколько файлов в свою очередь. Например, рассмотрите сценарий что выходные данные в файл вывода данных и данные регистрации к файлу журнала и возможно сообщениям об ошибках также. Это означает три канала вывода: один для данных, один для журналов и один для ошибок. С тех пор существует только два стандартных дескриптора для вывода, одна треть необходима. Можно звонить exec
открыть выходные файлы:
exec >data-file
exec 3>log-file
echo "first line of data"
echo "this is a log line" >&3
…
if something_bad_happens; then echo error message >&2; fi
exec >&- # close the data output file
echo "output file closed" >&3
Комментарий об эффективности входит, когда у Вас есть перенаправление в цикле, как это (предположите, что файл пуст для начала):
while …; do echo $a >>/tmp/bar; done
При каждом повторении открывается программа /tmp/bar
, ищет в конец файла, добавляет некоторые данные и закрывает файл. Более эффективно открыть файл раз и навсегда:
while …; do echo $a; done >/tmp/bar
Когда существует несколько перенаправлений, происходящих в разное время, звоня exec
выполнить перенаправления вместо того, чтобы перенести блок в перенаправление становится полезным.
exec >/tmp/bar
while …; do echo $a; done
Вы найдете несколько других примеров перенаправления путем просмотра io-redirection
наклейте этот сайт.
Каждому открытому файлу назначается файловый дескриптор и файловый дескриптор для стандартный ввод 0 стандартный вывод равен 1
стандартный вывод равен 2 Для открытия дополнительных файлов остаются дескрипторы с 3 по 9.
Возьмем, к примеру,
exec 3>&1 4>&2
exec 1> /proc/1/fd/1 2>&1
3>&1
создает новый дескриптор файла и перенаправляет его на 1, который является STDOUT 4>&2
также новый дескриптор файла и перенаправить его на 2, который является STDERR
1> /proc/1/fd/1
использует файловый дескриптор сокета 2>&1
также перенаправляет все из этого файлового дескриптора на 1, который является STDOUT
Я также узнал об этом совсем недавно, так что не стесняйтесь указать, если я что-то упустил
Ссылки по использованию exec и перенаправлению с использованием описаний файловhttps://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/x13082.html