将 /bin/bash 命令转换为 /bin/sh 命令
Convert /bin/bash command to /bin/sh command
我有以下命令...
/bin/bash -c 'diff <(sort text2) <(sort text1)'
它对每个文件进行排序并将它们通过管道传输到 diff 函数中。如果 /bin/bash
存在,这很有效。但是,我所在的系统只有/bin/sh
。我正在努力为此找到等效的命令。
如果我运行...
/bin/sh -c 'diff <(sort text2) <(sort text1)'
我会得到...
/bin/sh: syntax error: unexpected "("
也许只是简单的临时文件?
sort text1 >a; sort text2 >b; diff b a; rm a b;
POSIX shell 相当于 Bash:
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"
我有以下命令...
/bin/bash -c 'diff <(sort text2) <(sort text1)'
它对每个文件进行排序并将它们通过管道传输到 diff 函数中。如果 /bin/bash
存在,这很有效。但是,我所在的系统只有/bin/sh
。我正在努力为此找到等效的命令。
如果我运行...
/bin/sh -c 'diff <(sort text2) <(sort text1)'
我会得到...
/bin/sh: syntax error: unexpected "("
也许只是简单的临时文件?
sort text1 >a; sort text2 >b; diff b a; rm a b;
POSIX shell 相当于 Bash:
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"