man bash
diyor:
exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process
is created. The arguments become the arguments to command. If
the -l option is supplied, the shell places a dash at the
beginning of the zeroth argument passed to command. This is
what login(1) does. The -c option causes command to be executed
with an empty environment. If -a is supplied, the shell passes
name as the zeroth argument to the executed command. If command
cannot be executed for some reason, a non-interactive shell
exits, unless the execfail shell option is enabled. In that
case, it returns failure. An interactive shell returns failure
if the file cannot be executed. If command is not specified,
any redirections take effect in the current shell, and the
return status is 0. If there is a redirection error, the return
status is 1.
Son iki satır önemli olan şudur: Eğer tek exec
başına, komut olmadan çalıştırırsanız , yönlendirmelerin geçerli kabuğa uygulanmasını sağlar. Muhtemelen koşarken command > file
, çıktısının uçbirim yerine yerine command
yazıldığını biliyorsunuzdur file
(buna yeniden yönlendirme denir ). Eğer kaçarsan exec > file
yerine, o yönlendirme tüm kabuk için geçerlidir: kabuk tarafından üretilen herhangi bir çıktı yazılır file
yerine sizin terminaline. Örneğin burada
bash-3.2$ bash
bash-3.2$ exec > file
bash-3.2$ date
bash-3.2$ exit
bash-3.2$ cat file
Thu 18 Sep 2014 23:56:25 CEST
Önce yeni bir bash
kabuk başlattım . Sonra, bu yeni kabukta çalışıyorum exec > file
, böylece tüm çıktılara yönlendiriliyor file
. Aslında, ondan sonra çalışıyorum date
ama çıktı alamıyorum, çünkü çıktı yönlendirildi file
. Sonra kabuğumdan çıkıyorum (böylece yönlendirme artık geçerli olmaz) ve daha önce koştuğum komutun file
çıktısını içerdiğini görüyorum date
.