----- Original Message -----
> From: "lijo george" <george.l...@gmail.com>
> To: ast-developers@lists.research.att.com
> Sent: Tuesday, May 16, 2017 2:38:06 PM
> Subject: [ast-developers] ksh -x behaviour change between ksh93u and ksh93u+  
> versions
> 
> Hi,
> 
> The "ksh -x" option behaves differently between 2011 and the 2012 versions
> for the following script
> .
> Here's a sample output for the testcase attached.
> 
> 
> ksh93 2011 version
> ***********************************************************************
> $ ksh --version
> version sh (AT&T Research) 93u 2011-02-08
> $ cat test.sh
> #!/bin/ksh
> echo "正常終了"
> echo "正常終了正常終了"
> echo "正常終了 正常終了"
> echo "正常終了 正常終了"
> exit 0
> $ ksh -x test.sh
> + echo $'正常終了\r'
> 正常終了
> + echo $'正常終了正常終了\r'
> 正常終了正常終了
> + echo $'正常終了 正常終了\r'
> 正常終了 正常終了
> + echo $'正常終了 正常終了\r'
> 正常終了 正常終了
> + exit $'0\r'
> $
> 
> ksh93 2012 version
> ***********************************************************************
> # ksh --version
> version sh (AT&T Research) 93u+ 2012-08-01
> # cat test.sh
> #!/bin/ksh
> echo "正常終了"
> echo "正常終了正常終了"
> echo "正常終了 正常終了"
> echo "正常終了 正常終了"
> exit 0
> # ksh -x test.sh
> + echo $'\u[6b63]\u[5e38]\u[7d42]\u[4e86]\r'
> 正常終了
> + echo $'\u[6b63]\u[5e38]\u[7d42]\u[4e86]\u[6b63]\u[5e38]\u[7d42]\u[4e86]\r'
> 正常終了正常終了
> + echo $'\u[6b63]\u[5e38]\u[7d42]\u[4e86] \u[6b63]\u[5e38]\u[7d42]\u[4e86]\r'
> 正常終了 正常終了
> + echo
> $'\u[6b63]\u[5e38]\u[7d42]\u[4e86]\u[3000]\u[6b63]\u[5e38]\u[7d42]\u[4e86]\r'
> 正常終了 正常終了
> + exit $'0\r'
> #
> 
> Is this a bug or an intended behavior.

This is the output I received when I compiled ksh from beta [1] branch on 
github :

> ksh -x test.sh 
+ echo $'正常終了\r'
正常終了
+ echo $'正常終了正常終了\r'
正常終了正常終了
+ echo $'正常終了 正常終了\r'
正常終了 正常終了
+ echo $'正常終了 正常終了\r'
正常終了 正常終了
+ exit $'0\r'

So it is worth checking what changed in the beta release that fixed it.

> 
> I was going through the code changes which looked relevant and it looks like
> it has been added for a reason. But I'm not able to figure out what exactly
> the change is doing.
> 
> The following changes in the sh_fmtq function in string.c results in the old
> behavior
> 
> bash-4.1$ less trace.patch
> --- INIT.2012-08-01.old/src/cmd/ksh93/sh/string.c 2017-03-20
> 05:24:11.355975870 -0700
> +++ INIT.2012-08-01/src/cmd/ksh93/sh/string.c 2017-03-20 13:03:39.978917130
> -0700
> @@ -360,7 +360,7 @@
> for(;c;c= mbchar(cp))
> {
> #if SHOPT_MULTIBYTE
> - if(c=='\'' || c>=128 || c<0 || !iswprint(c))
> + if(c=='\'' || !iswprint(c))
> #else
> if(c=='\'' || !isprint(c))
> #endif /* SHOPT_MULTIBYTE */
> @@ -379,7 +379,6 @@
> }
> else
> {
> - int isbyte=0;
> stakwrite("$'",2);
> cp = string;
> #if SHOPT_MULTIBYTE
> @@ -416,26 +415,20 @@
> break;
> default:
> #if SHOPT_MULTIBYTE
> - isbyte = 0;
> - if(c<0)
> + if(!iswprint(c))
> {
> - c = *((unsigned char *)op);
> - cp = op+1;
> - isbyte = 1;
> - }
> - if(mbwide() && ((cp-op)>1))
> - {
> - sfprintf(staksp,"\\u[%x]",c);
> + while(op<cp)
> + sfprintf(staksp,
> +"\\%.3o",*(unsigned char*)op++);
> continue;
> }
> - else if(!iswprint(c) || isbyte)
> #else
> if(!isprint(c))
> -#endif
> {
> - sfprintf(staksp,"\\x%.2x",c);
> + sfprintf(staksp,"\\%.3o",c);
> continue;
> }
> +#endif
> state=0;
> break;
> }
> 
> Thanks,
> Lijo
> 
> _______________________________________________
> ast-developers mailing list
> ast-developers@lists.research.att.com
> http://lists.research.att.com/mailman/listinfo/ast-developers
> 

[1] https://github.com/att/ast/tree/beta

-- 
--
Siteshwar Vashisht
_______________________________________________
ast-developers mailing list
ast-developers@lists.research.att.com
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to