On 04/03/2013 03:02 PM, shawn kielty wrote: > this script works: > #! /bin/bash > > tclsh << SCRIPT > puts "hello world" > SCRIPT
Correct. > > while this script fails: > > #! /bin/bash > > tclsh << SCRIPT > puts "hello world" > SCRIPT Here-docs are particular. The end token must appear verbatim, exactly as the start token was parsed - but the parser strips off trailing space, so it is looking for a line matching exactly 'SCRIPT', and your 'SCRIPT ' is not such a line. The error message is correct. This is not a cygwin-specific problem. > > with the error: > > > $ ./embeddedTcl.sh > ./embeddedTcl.sh: line 5: warning: here-document at line 3 delimited by > end-of-file (wanted `DEL') > hello world > invalid command name "DEL" The bit about 'wanted `DEL'' and 'invalid command name "DEL"' tells me that you aren't faithfully copying-and-pasting when typing up your email. When I try on Linux, I get: $ bash -c 'cat << foo > hi > foo ' bash: line 2: warning: here-document at line 0 delimited by end-of-file (wanted `foo') hi foo where the message from bash mentions the spelling it is looking for, not some arbitrary string `DEL'. Other shells (I tried dash, mksh, ksh, and zsh) are a bit more forgiving, but ALL of them treat a line that does not match the expected terminator (because it has an erroneous trailing space) as part of the here-doc contents - all bash is doing differently is warning you about the issue before proceeding on anyways. The _only_ thing that might make this cygwin-specific is if the unintentional trailing whitespace in your script is due to you using carriage returns in part, but not all, of your file, and even then, you can tell bash to ignore carriage returns on cygwin (it's not on by default for various reasons, but lots of people use that mode to compensate for sloppy habits in editing files). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature