** 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 -- Ubuntu-server-bugs mailing list Ubuntu-server-bugs@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-server-bugs