Фоновый процесс начинается, но сразу "засыпает"; тем временем вторая команда date
sleep, и первая команда date выдает новое время. Трудно представить на бумаге истечение времени, поэтому вам следует попытаться самостоятельно реализовать этот пример. (Разница между двумя значениями времени может и не равняться в точности 5 с, в зависимости от загруженности машины и по ряду других причин.) Это удобный способ отложить запуск команды на будущее; рассмотрите также в качестве удобного механизма такой пример:$ (sleep 300; echo Чай готов) &
5291
$
(Если в строке, следующей за командой echo
'&' выше, чем у ';'.Символ &
$ pr файл | lpr &
позволяет выдать файл на печатающее устройство, не ожидая окончания выполнения команды. Использование скобок дает тот же эффект, но требует введения большего числа символов:
$ (pr файл | lpr ) &
Большинство команд допускает наличие аргументов в командной строке, таких, как файл в предыдущем примере (аргумент команды pr
echo посылает эхо своих аргументов без всякой интерпретации, а первый аргумент команды grep специфицирует строку-шаблон для поиска. И конечно, многие команды имеют необязательные параметры (флаги), задаваемые аргументами, начинающимися со знака “-”.Различные специальные символы, интерпретируемые shell
<, >, |, ; и &, не являются аргументами команд, запускаемых интерпретатором. Они управляют самим процессом запуска. Например,$ echo Hello > junk
требует, чтобы интерпретатор запустил команду echo
Hello и поместил выходной поток в файл junk. Строка > junk не является аргументом команды echo; она интерпретируется shell, и echo никогда ее "не увидит". На самом деле, данная строка может и не быть последней в командной строке:$ > junk echo Hello
Это идентичный запуск, хотя и менее очевидный.
В чем состоит различие между следующими командами?
$ cat file | pr
$ pr
$ pr file
(С течением времени операция переключения <
cat file |" считается более естественным, чем "< file".)3.2 Метасимволы
Интерпретатор распознает еще ряд символов как специальные. Наиболее часто используется звездочка *
* может быть любая последовательность символов. Например,$ echo *
есть не что иное, как некое подобие команды ls
'.' и '..', которые присутствуют в любом каталоге, символы подстановки в именах файлов нельзя применять к именам файлов, начинающимся с точки. Правило таково: символы подстановки в именах файлов действуют на имена файлов, начинающихся с точки, только в том случае, если точка явно задана в шаблоне. Как обычно, "рассудительная" команда echo прояснит ситуацию:$ ls
.profile
junk
temp
$ echo *
junk temp
$ echo .*
. .. .profile
$
Символы со специальным значением, подобные *