Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 May 2010 08:22:28 +0100
From:      Matthew Seaman <m.seaman@infracaninophile.co.uk>
To:        Aiza <aiza21@comclark.com>
Cc:        Anh Ky Huynh <xkyanh@gmail.com>, "questions@freebsd.org" <questions@freebsd.org>
Subject:   Re: sh script writing help
Message-ID:  <4C021234.3000803@infracaninophile.co.uk>
In-Reply-To: <4C020CB2.5070408@comclark.com>
References:  <4C01F419.10100@comclark.com>	<20100530053935.GG8866@dan.emsphone.com>	<4C02015C.5070605@comclark.com>	<20100530131730.1931dbd4@icy.localdomain> <4C020CB2.5070408@comclark.com>

next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 30/05/2010 07:58:58, Aiza wrote:
> Anh Ky Huynh wrote:
>> On Sun, 30 May 2010 14:10:36 +0800
>> Aiza <aiza21@comclark.com> wrote:
>>
>>> Dan Nelson wrote:
>>>> In the last episode (May 30), Aiza said:
>>>>> In a .sh type script I have && exerr " very long message gt 250
>>>>> char" all on the same line. This is a real pain to edit.
>>>>>
>>>>> Is there some code a can use to continue this on the next line
>>>>> so I can see it on the screen and still have the command
>>>>> function? I tried \ with no luck.
>>>> \ should work just fine:
>>>>
>>>> $ echo "long line \
>>>> split onto two"
>>>> long line split onto two
>>>> $
>>>>
>>>
>>> You example works only because the continuation starts at position
>>> 1.
>>>
>>> $   [ -n "${test-name-fowarding}" -o -n "${test-noname}" ] || \
>>>      exerr "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
>>>             xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
>>> this is for ease of reading the code but will display with a bunch
>>> of spaces in the middle of the sentence. The \ works fine bypassing
>>> all white space between code not so for white space between the "
>>> ".
>>>
>>> Is there a coding method to get around this?
>>
>> Do you try to read your expression from a file?
>>     exerr `cat /path/to/data`
>>
>> the contents of /path/to/data are your very long string.

A standard means of doing this sort of thing is to use a 'Here' document:

if ! [ -n "${test-name-forwarding}" -o -n "${test-noname}" ]; then
    exerr <<-E_O_EXERR
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
E_O_EXER
fi

The '<<-' operator is a variant on the usual '<<' operator used for
this: the only difference is that it strips leading tabs from the lines
in the here document.

	Cheers,

	Matthew

- -- 
Dr Matthew J Seaman MA, D.Phil.                   7 Priory Courtyard
                                                  Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey     Ramsgate
JID: matthew@infracaninophile.co.uk               Kent, CT11 9PW
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.14 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkwCEjQACgkQ8Mjk52CukIzc7gCbBalo5oJcsw+jkXHOm4+8qU3f
l2EAn30WwaSL3kTZ1iy3FGkTxQlBZ3pr
=WxjG
-----END PGP SIGNATURE-----



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4C021234.3000803>