man bash
mengatakan:
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.
Dua baris terakhir adalah yang penting: Jika Anda menjalankannya exec
sendiri, tanpa perintah, itu hanya akan membuat pengalihan berlaku untuk shell saat ini. Anda mungkin tahu bahwa ketika Anda menjalankan command > file
, output dari command
ditulis file
bukan ke terminal Anda (ini disebut redirection ). Jika Anda menjalankannya exec > file
, maka pengalihan berlaku untuk seluruh shell: Setiap output yang dihasilkan oleh shell ditulis untuk file
bukannya ke terminal Anda. Sebagai contoh di sini
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
Saya pertama kali memulai bash
shell baru . Kemudian, di shell baru ini saya jalankan exec > file
, sehingga semua output dialihkan ke file
. Memang, setelah itu saya jalankan date
tetapi saya tidak mendapatkan output, karena output diarahkan ke file
. Kemudian saya keluar dari shell saya (sehingga pengalihan tidak lagi berlaku) dan saya melihat bahwa file
memang berisi output dari date
perintah yang saya jalankan sebelumnya.