gpt4 book ai didi

bash - 标准输入的 `test -s` 在 Ubuntu Bash 4.4 和 macOS bash 4.4 上是不同的,是否有可移植的替代方案?

转载 作者:行者123 更新时间:2023-12-04 18:29:48 28 4
gpt4 key购买 nike

我有一个小脚本,只要它打开就应该从标准输入读取,但是当我在 Ubuntu 上的 bash 4.4(来自 Docker 镜像)和 bash 4.4 macOS(安装了 brew)上运行它时,我会得到不同的行为

脚本是:

$ cat test.sh
#!/bin/bash
while test -s /dev/stdin; do read A; echo "-- $A --"; done

在 macOS 上,它会:
$ (echo one; echo two) | ./test.sh
-- one --
-- two --

在 Ubuntu 上,它会:
$ (echo one; echo two) | ./test.sh
# empty output

是否有另一种方法来测试标准输入是否打开且非空?我玩过 read也是,但它似乎也不便携。

最佳答案

您可以将所有标准输入读取循环更改为此,以使其在两个系统上都可以工作:

[[ ! -t 0 ]] && while IFS= read -r A; do echo "-- $A --"; done
[[ ! -t 0 ]] :检查数据是否来自终端。

测试:
$> { echo one; echo two; } | ./test.sh
-- one --
-- two --

$> ./test.sh <<< $'abc\nfoo'
-- abc --
-- foo --

$> ./test.sh
$>

关于bash - 标准输入的 `test -s` 在 Ubuntu Bash 4.4 和 macOS bash 4.4 上是不同的,是否有可移植的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com