对于 shell 脚本编写新手来说,我很少有这样的命令。拥有这样的临时文件是最佳选择还是我应该尝试组合所有这些命令?如果是后者,你能帮我将输出从 dd 命令重定向到 tr 命令,然后重定向到 iconv。谢谢。
dd if=abcd.dat cbs=38 conv=块=abcd.temp
猫 abcd.temp | tr -d "\n" | tr -d "\n" | tr -d "\r" > abcd. 输出
iconv -f ASCII -t EBCDIC-US <abcd.output > abcd.ebcdic
答案1
您可以使用管道来避免各种中间文件,与tr
现有命令中的情况相同。dd
的默认输出(如果of
未指定)可以重定向:
dd if=abcd.dat cbs=38 conv=block | tr -d "\n" | tr -d "\r" | iconv -f ASCII -t EBCDIC-US > abcd.ebcdic
两个tr
命令可以组合使用:
dd if=abcd.dat cbs=38 conv=block | tr -d "\n\r" | iconv -f ASCII -t EBCDIC-US > abcd.ebcdic
答案2
一般来说,避免临时文件通常会更快,因为通过管道输出到第二个进程可以允许两个进程重叠处理。
但是,如果使用临时文件使脚本更具可读性,那么它应该是完全可以接受的(前提是脚本在完成使用这些文件后将其删除)。
我倾向于将其视为dd
例外,因为它能够通过错误的参数造成如此巨大的损害。我会尽量避免在脚本中使用它。
很高兴看到古老的 EBCDIC 仍在使用!