Shell-Script
短劃線等效於腳本輸出的自我重定向
在 Bash 中,您可以重定向目前正在執行的腳本的所有未來標準輸出輸出。例如,使用此腳本,
exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3
這將在 syslog 中結束:
Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3
但這是特定於 Bash 的,帶有重定向的裸 exec 似乎在 Dash 中不起作用。
Syntax error: redirection unexpected
我怎樣才能讓它在 Dash 中工作,或者可能在兩個 shell 中工作?
你可以這樣做:
{ commands .... } | logger -t my_awesome_script
你可以用任何外殼來做到這一點。
如果您不喜歡它的外觀,也許可以讓腳本將自己包裝在一個函式中。
#!/bin/sh run() if [ "$run" != "$$" ] || return then sh -c 'run=$$ exec "$0" "$@"' "$0" "$@" | logger -t my-awesome-script fi #script-body run "$@" || do stuff
使用命名管道很容易模擬程序替換。
mkfifo logger_input logger -t my_awesome_script < logger_input & exec > logger_input echo 1 echo 2 echo 3
事實上,命名管道是一種機制(另一種是
/dev/fd
),可以在bash
.