如何可能添加可选将条件格式转换在管道外壳的一个命令序列
iconv -f utf-16 -t latin1
管道命令序列内?
假设源文件可以是latin1或utf16。
使用awk,grep之类的shell脚本应该能够在两种格式上工作,方法是添加一个可选的转换步骤。
在尊重DRY原则(不重复其他命令)的同时,怎样才能以最美丽的方式完成?
编辑 - 命令
CURENT顺序是这样的:
awk '...' $1 | cut ... | colorize
如何可能添加可选将条件格式转换在管道外壳的一个命令序列
iconv -f utf-16 -t latin1
管道命令序列内?
假设源文件可以是latin1或utf16。
使用awk,grep之类的shell脚本应该能够在两种格式上工作,方法是添加一个可选的转换步骤。
在尊重DRY原则(不重复其他命令)的同时,怎样才能以最美丽的方式完成?
编辑 - 命令
CURENT顺序是这样的:
awk '...' $1 | cut ... | colorize
不完全是有效的,但以下容易在管道中设置条件命令。诀窍是从各种可供选择的命令,选择让你随时运行东西:
opt_condtion=true; #true run extra command, false not to first_command | ($opt_condition && (optional_command || true) || cat) | third_command
的(optional_command || true)
保证了猫不运行,如果 optional_command返回非零退出代码作为额外猫可能会挂起流水线命令。
使用完整(子壳体)允许您有很大的自由度。如果命令太复杂,将它们放在一个函数中以保持管道简单。
为了完整起见,下面是(或多或少)我的命令:'tail -f $ {1} | ([[$(file -i $ {1})=〜utf-16be]] &&(iconv -f UTF-16 -t UTF-8 || true)|| cat) awk'...'|切... | colorize' – user3341592
你是什么意思“一个可选”。你在找If语句吗?你的管道命令的顺序是什么样的? – JNevill
是的,看着某种if语句,以便$ 1在utf-16时首先转换为拉丁文。想要避免临时文件,并且只需在命令序列中添加一个额外的步骤(如果可能的话)。 – user3341592