Unoffical empeg BBS

Quick Links: Empeg FAQ | RioCar.Org | Hijack | BigDisk Builder | jEmplode | emphatic
Repairs: Repairs

Topic Options
#251874 - 16/03/2005 19:43 bizarre shell problem
ukengb
member

Registered: 30/04/2003
Posts: 136
Loc: United Kingdom
I have a script that includes the following line:-

[ ${@:0-2:1} = '.' ] || echo

but after displaying the text I get

Segmentation fault

If I run the same code on the command line I don't get the error.

If I change the substr code in the script to

${@:0-2}

it's OK - no error, but of course isn't doing what I want.
So what can be the problem that causes the error only when in a shell script, but not otherwise?

Come to think of it, what's a segmentation fault?

Top
#251875 - 16/03/2005 21:08 Re: bizarre shell problem [Re: ukengb]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
Quote:
Come to think of it, what's a segmentation fault?


Bad pointer. You have found a bug in whatever shell you're using.
Report it, or it may never get fixed.

Cheers

Top
#251876 - 16/03/2005 21:13 Re: bizarre shell problem [Re: ukengb]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
What shell is that for, anyway? Bash doesn't like it as-is.
But bash does accept this version:

[ ! ! "${@:2:1}" = "." ] || echo

Cheers

Top
#251877 - 16/03/2005 22:22 Re: bizarre shell problem [Re: mlord]
tfabris
carpal tunnel

Registered: 20/12/1999
Posts: 31597
Loc: Seattle, WA
Quote:
You have found a bug in whatever shell you're using.
Report it, or it may never get fixed.

Isn't he talking about Bash in the empeg developer build? So who does he report it to?
_________________________
Tony Fabris

Top
#251878 - 16/03/2005 23:14 Re: bizarre shell problem [Re: tfabris]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
Quote:
Isn't he talking about Bash in the empeg developer build? So who does he report it to?


He didn't say which shell, or platform.

But if it is the player build, then.. no point in reporting it, unless he can also get it to do it on a more modern machine!

Cheers

Top
#251879 - 17/03/2005 09:50 Re: bizarre shell problem [Re: mlord]
ukengb
member

Registered: 30/04/2003
Posts: 136
Loc: United Kingdom
Quote:
Quote:
Isn't he talking about Bash in the empeg developer build? So who does he report it to?


He didn't say which shell, or platform.

But if it is the player build, then.. no point in reporting it, unless he can also get it to do it on a more modern machine!


'He' didn't indicate where this problem was occurring - sorry. I was convinced I had stated this was a script running on the empeg. Anyway, that's where it is and of course it's bash.

The modified code that Mark (Lord) posted probably does work, but it's not what I need. I want to check that the penultimate char is a period, but Mark's code checks the second char. The reason I use '0-1' is that I have found in the past that bash will not accept a negative value when you want to represent that no. of chars from the end of the string, BUT if you use that calculation it does work and indeed that appeared to be the case on the empeg. But as I then discovered, it works when you use the code on the command line, but causes this error when used in a script.

On my RedHat machine I have used these constructs without any problem (once I worked around the negative value problem), so it must be to do with the empeg's bash.

From what you all say it would appear that there's no way around this so I just have to modufy the code and my requirements to work around it. Would that be a fair assessment?

Top
#251880 - 17/03/2005 12:52 Re: bizarre shell problem [Re: ukengb]
wfaulk
carpal tunnel

Registered: 25/12/2000
Posts: 16706
Loc: Raleigh, NC US
ISTR that if the first line of your shell is "#!/bin/sh" then bash falls back to some sort of Bourne pseudo-compatibility. If you've got that in there, then try changing it to "#!/bin/bash".

This is just a guess, though.
_________________________
Bitt Faulk

Top
#251881 - 17/03/2005 13:29 Re: bizarre shell problem [Re: ukengb]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
I take it you want code to detect the final character of the final arg, and tell whether it was a period or not?
Code:

#!/bin/bash
all="$@"
if [ "${all##*.}" = "" ]; then
echo "ended with a dot"
else
echo "did not end with a dot"
fi


Top
#251882 - 17/03/2005 13:57 Re: bizarre shell problem [Re: mlord]
wfaulk
carpal tunnel

Registered: 25/12/2000
Posts: 16706
Loc: Raleigh, NC US
He states quite clearly:

Quote:
I want to check that the penultimate char is a period
_________________________
Bitt Faulk

Top
#251883 - 17/03/2005 14:41 Re: bizarre shell problem [Re: wfaulk]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
Quote:
He states quite clearly:

Quote:
I want to check that the penultimate char is a period



Oh.. dictionary out.. second last character.

Okay, so what he was doing originally should work, so long as his script ensures there are always at least two characters in the string.
Code:

junk=" $@"
[ "${junk:0-2:1}" = "." ] || echo no



Edited by mlord (17/03/2005 14:45)

Top
#251884 - 17/03/2005 15:16 Re: bizarre shell problem [Re: mlord]
wfaulk
carpal tunnel

Registered: 25/12/2000
Posts: 16706
Loc: Raleigh, NC US
Hmm. I wonder if that's the problem -- that his test case had less than two characters. Reading past the end of an array would be a common cause for a seg fault and I can believe that there was a version of bash that failed to check for the front end of the array. Seems unlikely, but possible, especially if there was a different bug that failed to put the right thing in the variable being checked.
_________________________
Bitt Faulk

Top
#251885 - 17/03/2005 17:18 Re: bizarre shell problem [Re: wfaulk]
ukengb
member

Registered: 30/04/2003
Posts: 136
Loc: United Kingdom
Quote:
Hmm. I wonder if that's the problem -- that his test case had less than two characters.

No, the test string was about 20 chars so no problem there. Actually I'm not sure if that would be a problem anyway, but in any case not applicable here.

I think the important point here is that the code I used only fails when used in a script, whereas there is NO error when used directly on the command line (nor on my RedHat machine in any circumstances). This is the puzzle, that there is a totally different result when using these 2 methods.

As I said, I'm resigned to figuring a 'get around' as I doubt the empeg bash will get upgraded, but thanks for the support anyway.

Top
#251886 - 17/03/2005 22:27 Re: bizarre shell problem [Re: ukengb]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
The last version I posted here runs correctly from a script on my empeg player.

Cheers

Top
#251887 - 18/03/2005 06:27 Re: bizarre shell problem [Re: mlord]
ukengb
member

Registered: 30/04/2003
Posts: 136
Loc: United Kingdom
OK, I've already re-written my script so that the error doesn't occur, but in the interests of our quest for knowledge and truth, I've doen some more checking:-)

My original line was

[ "${@:0-2:1}" = "." ] || echo

and this causes the seg. fault - always. But if I replace this with:-

anyvarname="$@"
[ "${anyvarname:0-2:1}" = "." ] || echo

there is no error. IOW the problem only relates to when $@ is used and seems to confirm the existence of a bash internal bug.

It's no longer a problem for me, but interesting to know what not to do in the future.

Top
#251888 - 18/03/2005 11:11 Re: bizarre shell problem [Re: mlord]
ukengb
member

Registered: 30/04/2003
Posts: 136
Loc: United Kingdom
A quick question for Mark.

Hijack seems to eliminate multiple spacing from text strings before displaying them in a popup, am I right about this, or is there some other reason why my double spaces are not appearing in the displayed popup message?

Top
#251889 - 18/03/2005 12:23 Re: bizarre shell problem [Re: ukengb]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
Quote:

Hijack seems to eliminate multiple spacing from text strings before displaying them in a popup ..?


Nope. Spaces are displayed as three columns of blank pixels each.

Try this, to help understand what is probably confusing you:
Code:

ftp to your player, and then do:

site popup 5 testing 123

site popup 5 "testing 123"



cheers


Edited by mlord (18/03/2005 12:24)

Top
#251890 - 18/03/2005 12:26 Re: bizarre shell problem [Re: ukengb]
mlord
carpal tunnel

Registered: 29/08/2000
Posts: 14493
Loc: Canada
Quote:

[ "${@:0-2:1}" = "." ] || echo

and this causes the seg. fault - always. But if I replace this with:-

anyvarname="$@"
[ "${anyvarname:0-2:1}" = "." ] || echo

there is no error


Actually, I was suprised that "${@ ... ]" works at all!

I suppose in the version of bash on the player, the coders may not have anticipated that anyone would even try it, since $@ means something quite different from "$@" or $*.

Cheers

Top