[yocto] Bash parser

William Mills wmills at ti.com
Wed Jul 16 09:14:27 PDT 2014



On 07/16/2014 06:32 AM, Isak Lichtenstein wrote:
> Hi Olof,
>
> Thank you very much for your prompt answer
>>
>> On 14-07-16 11:36 +0200, Isak Lichtenstein wrote:
>>> In this method I'm using the bash syntax. But a lot of time the parser
>>> doesn't manage to parse my file properly. Examples:
>>>
>>> 	TMP="file1 file2"
>>> 	read -a scripts <<< $tmp
>>> generates
>>> 	ShellSyntaxError: expecting here-document name, got '<'
>>>
>>> Or
>>>
>>> 	TMP="file1 file2"
>>> 	scripts=(${TMP})
>>> generate
>>> 	ShellSyntaxError: LexToken(TOKEN,'${TMP}',0,0)
>>>
>>>
>>> Other bash commands are parsed properly, but generate an error while
>>> executing them. Example:
>>> 	TMP="file1, file2"
>>> 	tmp=${TMP//,/ }
>>> generates
>>> 	Bad substitution
>>> 	| WARNING: exit code 2 from a shell command.
>>
>> Note that these features you describe here are all bash extensions. For Debian
>> users (and I think Ubuntu users as well?), the default /bin/sh is dash and does not
>> support either of these extensions. There are cases where the bitbake parser will
>> refuse valid portable shell script features as well though, like shell arithmetics, e.g.:
>
> Ubuntu default is actually bash.

Ubuntu default login shell is bash.
Default for /bin/sh is to link to dash.
So shell scripts that use
	#!/bin/sh
will execute with dash.

You may have changed this on your machine and don't remember.
Many developers do.
I just checked a fresh 14.04 to make sure my knowledge is up to date.
	ls -l /bin/sh

>>
>>   n=$((n+1))
>>
>>> Does a page exist somewhere describing the bash features supported by
>>> the parser and also the execution environment?
>>> Are arrays supported at all?
>>
>> I don't know of any such documentation, but if you stick to portable shell script
>> features, you should be mostly fine.
>>
> Thanks for the advice. Will try to stick to it.
>
> Isak
>



More information about the yocto mailing list