Unix zsh:来自awk printf的意外输出
在bash中,我可以执行以下操作:Unix zsh:来自awk printf的意外输出,unix,awk,printf,zsh,Unix,Awk,Printf,Zsh,在bash中,我可以执行以下操作: $ printf "foo\nbar\n" | awk '{printf "%s\n", $1}' foo bar …但在zsh中,当我做同样的事情时,我得到了: $ printf "foo\nbar\n" | awk '{printf "%s\n", $1}' [m\n", printf}'foo bar 我做错了什么?我也在使用zsh,并且得到了正确的(您期望的)输出 您可能需要在.zshrc文件中签入几点 如果printf是别名 您是否使用preex
$ printf "foo\nbar\n" | awk '{printf "%s\n", $1}'
foo
bar
…但在zsh中,当我做同样的事情时,我得到了:
$ printf "foo\nbar\n" | awk '{printf "%s\n", $1}'
[m\n", printf}'foo
bar
我做错了什么?我也在使用zsh,并且得到了正确的(您期望的)输出 您可能需要在.zshrc文件中签入几点
祝你好运。你有没有可能使用oh my zsh?由于自动终端标题设置中的提示展开,终端设置中存在一个错误,导致它评估命令(如printf和date)中的%标记(以及子命令
$()
!)
查看~/.oh my zsh/termsupport.sh
并应用此更改:
*** termsupport.zsh.orig 2012-01-31 10:49:57.503119973 +0100
--- termsupport.zsh 2012-01-31 10:50:55.043118110 +0100
***************
*** 24,31 ****
function omz_termsupport_preexec {
emulate -L zsh
setopt extended_glob
! local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
! title "$CMD" "%100>...>$2%<<"
}
autoload -U add-zsh-hook
--- 24,35 ----
function omz_termsupport_preexec {
emulate -L zsh
setopt extended_glob
! local CMD_1=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
! local CMD_2=${2//\$\(/\\\$(} # ')}
! CMD_1=${CMD_1//\%/%%}
! CMD_2=${CMD_2//\%/%%}
! #
! title "${CMD_1}" "%100>...>${CMD_2}%<<"
}
autoload -U add-zsh-hook
***termsupport.zsh.orig 2012-01-31 10:49:57.503119973+0100
---termsupport.zsh 2012-01-31 10:50:55.043118110+0100
***************
*** 24,31 ****
功能omz_术语支持_preexec{
仿真-lzsh
setopt扩展_glob
!local CMD=${1[(wr)^(*=*|sudo | ssh |-*)]}仅限CMD名称,或者如果这是sudo或ssh,则为下一个CMD
!title“$CMD”“%100>…>$2%${CMD_2}%I获得相同的foo
(换行符)bar
你期望的输出。你确定你没有在什么地方打字吗?是的,我已经打了大约一百万次了,尝试了很多不同的书写方式,总是能得到输出:/你为它设置了别名吗?没有。我实际上想做的是有点不同的-这只是演示在Behavior.打开本地shell调试,查看是否显示任何别名或函数扩展正在发生,即set-vx
。祝您好运。更具体地说,问题是由以下原因引起的。