微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 /bin/bash 命令转换为 /bin/sh 命令

如何解决将 /bin/bash 命令转换为 /bin/sh 命令

我有以下命令...

/bin/bash -c 'diff <(sort text2) <(sort text1)'

它对每个文件进行排序并将它们通过管道传输到 diff 函数中。如果 /bin/bash 存在,这很有效。但是,我使用的系统只有 /bin/sh。我正在努力为此找到等效的命令。

如果我跑...

/bin/sh -c 'diff <(sort text2) <(sort text1)'

我会得到...

/bin/sh: 语法错误:意外的“(”

解决方法

与 Bash 等效的 POSIX shell:

bash -c 'diff <(sort text2) <(sort text1)'

是:

sh -c 'trap "rm -fr -- \"$t\"" EXIT ABRT INT;t=$(mktemp -d);mkfifo "$t/a" "$t/b";sort text1>"$t/a"&sort text2>"$t/b"&diff "$t/b" "$t/a"'

或者以文明的方式

#!/usr/bin/env sh

trap 'rm -fr -- "$tmpdir"' EXIT ABRT INT
tmpdir=$(mktemp -d)

FIFO_A="$tmpdir/fifoA"
FIFO_B="$tmpdir/fifoB"
mkfifo -- "$FIFO_A" "$FIFO_B"
sort text1 > "$FIFO_A" &
sort text2 > "$FIFO_B" &
diff -- "$FIFO_B" "$FIFO_A"
,

也许只是简单的临时文件?

sort text1 >a; sort text2 >b; diff b a; rm a b;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。