[Bug 1073077] Re: zsh complains about locale_warn on launch
Scott Moser
smoser at ubuntu.com
Thu Nov 8 16:01:48 UTC 2012
** Description changed:
- zsh complains if an '=' occurs in a suffix or prefix shell parameter
- expansion.
+ == SRU Information ==
+ [Impact]
+ * Users who select zsh as shell and invoke /etc/profile.d scripts
+ see an error message like:
+ locale_warn:13: * not found
+ * This contained fix makes that error message go away, and makes
+ the Z99-cloud-locale-test.sh script in /etc/profile.d function
+ properly with zsh.
+ * The fix adds new code to run 'emulate -L sh' if and only if the variable
+ ZSH_NAME is defined (which is only likely to be true if shell is zsh).
+ Per zshbuiltins(1), '-L' to 'emulate' indicates that the change in
+ behavior should be limited to the containing function.
- $ sh -c 'f="foo=bar"; echo ${f%%=*}'
- foo
- $ bash -c 'f="foo=bar"; echo ${f%%=*}'
- foo
- $ zsh -c 'f="foo=bar"; echo ${f%%=*}'
- zsh:1: * not found
+ [Test Case]
+ * launch cloud-image instance, get IP address and set 'IP' for use below.
+ * install zsh, change the 'ubuntu' user's shell
+ LC_ALL=en_US.UTF-8 ssh ubuntu@$IP \
+ "sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh"
+ * problem is then reproduced with:
+ LC_ALL=fr_FR.UTF-8 zsh /etc/profile.d/Z99-cloud-locale-test.sh
+ Instead of seeing a message about invalid locale and how to fix it, the
+ user will see:
+ locale_warn:13: * not found
+
+ [Regression Potential]
+ * chance for regression is low, since the only real change is contained
+ with a condition that will limit it to the case where the shell is zsh.
+ * If there was fallout, it would one of:
+ * 'emulate -L' being run with non-zsh shell, likely resulting in an error
+ message but nothing worse.
+ * user's zsh shell being changed to 'emulate sh' (if the '-L' did not
+ get applied correctly)
+
+ == End SRU Information ==
+
+
+ zsh complains if an '=' occurs in a suffix or prefix shell parameter expansion.
+
+ $ sh -c 'f="foo=bar"; echo ${f%%=*}'
+ foo
+ $ bash -c 'f="foo=bar"; echo ${f%%=*}'
+ foo
+ $ zsh -c 'f="foo=bar"; echo ${f%%=*}'
+ zsh:1: * not found
It is work-aroundable by escaping the '=' in the shell suffix match with a '\'. Ie:
- $ zsh -c 'f="foo=bar"; echo ${f%%\=*}'
- foo
-
+ $ zsh -c 'f="foo=bar"; echo ${f%%\=*}'
+ foo
== original bug report ==
After upgrading my Amazon machine to Ubuntu 12.04, every time I run zsh I get the following output:
locale_warn:13: * not found
Apparenlty this is caused by the file /etc/profile.d/Z99-cloud-locale-
test.sh in the cloud-init package. zsh always outputs an error when a
glob like * fails to match any files.
ProblemType: Bug
DistroRelease: Ubuntu 12.04
Package: cloud-init 0.6.3-0ubuntu1
ProcVersionSignature: Ubuntu 3.2.0-32.51-virtual 3.2.30
Uname: Linux 3.2.0-32-virtual i686
ApportVersion: 2.0.1-0ubuntu14
Architecture: i386
Date: Tue Oct 30 11:03:46 2012
Ec2AMI: ami-fb9ca98f
Ec2AMIManifest: (unknown)
Ec2AvailabilityZone: eu-west-1c
Ec2InstanceType: c1.medium
Ec2Kernel: aki-4deec439
Ec2Ramdisk: unavailable
PackageArchitecture: all
ProcEnviron:
TERM=xterm
PATH=(custom, user)
LANG=en_GB.UTF-8
SHELL=/usr/bin/zsh
SourcePackage: cloud-init
UpgradeStatus: Upgraded to precise on 2012-10-29 (0 days ago)
--
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to cloud-init in Ubuntu.
https://bugs.launchpad.net/bugs/1073077
Title:
zsh complains about locale_warn on launch
To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-init/+bug/1073077/+subscriptions
More information about the Ubuntu-server-bugs
mailing list