在 shell 脚本中使用记录器

use*_*344 2 linux shell bash logging

如何在 shell 脚本中使用记录器?

如果我跑

ntpd -qnp pool.ntp.org 2> >(logger)
Run Code Online (Sandbox Code Playgroud)

在控制台中,它按预期工作。

如果我把它放到一个shell脚本中

#!/bin/sh
ntpd -qnp pool.ntp.org 2> >(logger)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

line 2: syntax error: unexpected redirection
exited with code 2
Run Code Online (Sandbox Code Playgroud)

shell 脚本有什么问题?

小智 6

shebang 是正确的,因为 #!/bin/sh 和 #!/bin/bash 都可以使用*,但是,IIRC,您应该使用管道而不是重定向记录器,因为它是程序而不是文件。

试试这个脚本:


#!/bin/sh
ntpd -qnp pool.ntp.org 2>&1 |logger

Run Code Online (Sandbox Code Playgroud)

*如果您使用#!/bin/sh 作为您的脚本,它们应该是posix 兼容的,即在solaris 和AIX 上运行良好。如果您使用过某些 bash 特定功能,则必须使用 #!/bin/bash,因为没有更多的可移植性。