linux - 在 bash 脚本中回显变量时的 SIGPIPE

标签 linux bash signals

我有一个在 debian 机器上运行的 cronjob。在脚本的某些点上,我通过

设置变量
HOSTNAME=$( hostname -s | tr A-Z a-z )

然后,我将该值记录到系统日志(这样我就可以看到一切都在正常运行)

function log {
    # just echo it
    echo -n `date -u "+%s"`
    echo -n " "
    echo $1

    /usr/bin/logger -t $0 -- $1
}

log "Hostname: ${HOSTNAME}"

但是,在这个盒子上,我收到了一个 SIGPIPE。这在整个脚本中多次发生。我已捕获 SIGPIPE 以确认情况确实如此,但我想实际解决该问题。

谁能告诉我可能导致 SIGPIPE 的原因,以及如何修复它?我试过创建一个较小的测试脚本,但该脚本的 react 方式不同。

最佳答案

我的猜测:在 cron 环境中,PATH 是有限的,这意味着 shell 可能无法找到 hostname 和/或 tr。首先,找出 hostname 和 tr 所在的位置,并使用绝对路径代替,例如:

HOSTNAME=$( /bin/hostname -s | /usr/bin/tr A-Z a-z )

关于linux - 在 bash 脚本中回显变量时的 SIGPIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584332/

相关文章:

xml - 在 bash 脚本中提取 XML 值

linux - git在Windows和Linux之间切换后强制刷新索引

linux - 如何以编程方式(或通过 CLI)旋转 PDF?

使用 BCrypt 加密 MYSQL 密码

c - 当程序接收到 SIGTSTP 信号时会发生什么

c - 在信号处理程序中访问长整数

c++ - QT中动态添加QObject的SIGNAL(带参数)如何处理?

linux - cron 找不到命令 pyenv

linux - 当 JSF Designer 时,Jdeveloper 在 Linux 上的渲染困惑

php - 用于在一系列文件中进行 grep 的 Shell 脚本