system command
Dennis Malen
dmalen at malen.com
Wed Nov 2 09:26:51 PST 2005
Brian,
Thanks so much for your response. I am going to keep it as a "how to" in the
future. It was very detailed.
Your right as far as being more methodical. When we were testing we missed
trying the back slashes in the manner that finally resolved the problem. It
was one of our programmers that was playing with it. We thought we did try
the final approach, but it appeared that was the only configuration when
playing with the back slashes that we had not tried.
Hopefully you received the e-mail showing the correct code, if not I'll send
it directly to you. It was already sent to the list.
Best regards,
Dennis
----- Original Message -----
From: "Brian K. White" <brian at aljex.com>
To: "filePro mailing list" <filepro-list at seaslug.org>
Sent: Wednesday, November 02, 2005 1:11 AM
Subject: Re: system command
>
> ----- Original Message -----
> From: "Dennis Malen" <dmalen at malen.com>
> To: "Fairlight" <fairlite at fairlite.com>;
> <filepro-list at lists.celestial.com>
> Cc: "pmahler" <pmahler at malen.com>
> Sent: Tuesday, November 01, 2005 5:50 PM
> Subject: Re: system command
>
>
>> Mark,
>>
>> I have tried everyone's suggestions and then some. I used the redirecting
>> suggestion, I used your changes in the script, I have done what Ken
>> requested. It does not work.
>>
>> I have also tried the sh -c.
>>
>> You say it worked on your system flawlessly. What worked! Did it execute
>> the file or did you just see a return script.
>>
>> How do you know it worked. I used all your scripts and it didn't work..
>>
>> My last suggestion did work if the script was in an executable file. My
>> only problem is being able to append to the line so I can put in the
>> variable record number. Note, it must append to the line and not go to
>> the next line. If anyone knows how to do it, please let me know.
>>
>> I had to develop a work around after the suggestions did not work. You
>> can't blame me for that.
>
> If you are using echo to write output, and if the shell the echo command
> is built into supports slash codes by default, then the way you write a
> line and append to the same line later is to tell the echo command not to
> add a trailing newline, which it will add by default.
>
> On a sco unix box, the default shell is /bin/sh, and sco's /bin/sh
> interprets slash codes by default, and so in that context you would add \c
> to the very end of the echo command, but inside the quotes.
> That's inside the quotes to the echo command, not just inside the quotes
> to the system command.
>
> try this manually at the command line:
>
> # echo "aaa\c" > file.txt
> # echo "bbb" >> file.txt
> # cat file.txt
>
> If the OS is linux or if for whatever other reason you're really using
> bash, then you need echo -e "aaa\c" or echo -n "aaa"
>
> man sh and look for stuff about echo. (type /echo and hit [Enter] while in
> the pager viewing the page)
>
> That said, this is the most idiotic and backwards way to accomplish
> something so simple it's not funny.
> Just figure out the necessary backslash nesting necessary and keep it a
> simple echo command.
> It's a little tedious but so? Welcome to programming. Handling backslashes
> inside multiple nested layers of backslash-eaters is like that. You often
> can't just try what seems likely once and expect it to work. It's not
> uncommon to need 4 or more backslashes for every 1 that you need to reach
> the final destination when every handler along the way will interpret them
> and eat half of those present.
>
> You have to be a bit more methodical, less haphazard and less guessing in
> you approach to solving the problem.
>
> You have a string that ultimately you know will cause tiny term to perform
> an act.
>
> Start by figuring out what it takes to get fp and the system command and
> the shell inside that and the echo command inside _that_ , to produce a
> string that has all the easy simple parts right, and don't worry about
> escape characters and other codes. Just get it so it makes a string the
> visually looks close, but with some orinary character in place of the
> special cases.
>
> Then figure out what it takes to get a single escape character.
>
> Then start replacing bits of the string with variables and get the
> unquote/concat/requote right bit at a time each time you add another break
> in the string.
>
> Forget trying to get the final result all at once. Obviously you are not
> fluent enough with the shell or with the basic nature of handling nested
> quoting, and special codes withing nested layers of things that interpret
> some of the same special codes.
>
> Another trick you may be able to use is to use single-quotes for the echo
> command inside the filepro system command, and use fp to create the escape
> character and other special characters like that \015
> by using chr(). Single quotes have a special meaning to the shell, and so
> sometimes you can't use them, but it looks like in this case you can.
>
> My offhand guess at one possible way to do the following with single
> quotes to avoide the backslash mess is:
> pa="\\"\\033&oFvar
> searchnum="{rn{";CompileFile(\\\\"260268.cs\\\\");\\015\\""
>
> Is this:
> system "echo '" { chr("27") { "&oFvar searchnum=" { rn {
> ";CompileFile(\"260268.cs\");" { chr("13") { "'"
>
> That should result in the shell seeing a command that looks like this:
>
> echo '^[&Fvar searchnum=12345;CompileFile("260268.cs");^M'
>
> Which should result in tiny term seeing this:
>
> ^[&Fvar searchnum=12345;CompileFile("260268.cs");^M^K
>
> The echo command will add a linefeed to that, and the ^M (aka \015, aka
> \r, aka chr("13"), aka carriage-return) comming immediately before the
> linefeed (^K, aka \010, aka \n, aka chr("10"), aka line-feed) added by
> default by echo at the end of the line and together with that linefeed,
> collectively just forms a normal DOS line-ending.
>
> The ^[ is just another way of saying <a single byte, the escape character,
> goes here>
> It represents Ctrl-[ and it's litteral in that you can actually type
> Ctrl-[ (as a hot-key, hold down Ctrl, and press [ while doing so), and
> it's the same as if you'd pressed the escape key.
> Just like you can type ^H (Ctrl-H) instead of backspace, or ^M instead of
> Enter.
> Your original \033 is just a way to tell the shell & it's echo command to
> produce an escape character.
>
> Also try doing this:
> build up what you think is a system command that does roughly what you
> want, again without attempting to get any special quoting or special
> characters.
> Inside the quotes at the end of the system cmmand, but at the very end,
> outside the quotes for the echo command, add >/tmp/capture like Mark and
> Ken suggested.
>
> If the file looks ok then try adding one bit of complication, like say the
> quotes that ned to go around the file name inside the parens.
> and run it again.
> If the file looks ok, and now has quotes where they should be, then add
> anther bit, like replacing a static value with a variable and run again.
>
> When you get to where you are trying to add the escape and carriage return
> characters, after you run the fp process to create the temp file, view the
> temp file with hd or od.
> like this:
> # hd < /tmp/capture
>
> The above string, if it starts off with an escape character, will look
> like this:
>
> # echo "\033&oFvar searchnum=12345;CompileFile(\"123456.cs\");\r" |hd
> 0000 1b 26 6f 46 76 61 72 20 73 65 61 72 63 68 6e 75 .&oFvar
> searchnu
> 0010 6d 3d 31 32 33 34 35 3b 43 6f 6d 70 69 6c 65 46
> m=12345;CompileF
> 0020 69 6c 65 28 22 31 32 33 34 35 36 2e 63 73 22 29
> ile("123456.cs")
> 0030 3b 0d 0a ;..
> 0033
> #
>
> You are looking to match up the hex pairs on the left with the visual
> characters on the right.
> Each pair is one character.
> Unprintable characters are shown as "." on the right.
> notice my echo command starts with \033
> notice the first hex pair is 1b (same value, but in hex)
> notice on the right the first character is a "."
>
> You can also tell hd to use either decimal or octal to show the special
> characters too, to match either the fp chr() command or the echo \nnn
> codes to make it easier to spot the discrepency between your original
> command and the final result. If you used chr in fp (decimal), the use
> hd -bd or hd -cd, if you used echo \nnn codes (octal), then use hd -bo or
> hd -co
>
> decimal: notice 27 at the beginning, and 13, 10 at the end
> # echo "\033&oFvar searchnum=12345;CompileFile(\"123456.cs\");\r" |hd -bd
> 0000 27 38 111 70 118 97 114 32 115 101 97 114 99 104 110 117
> 0010 109 61 49 50 51 52 53 59 67 111 109 112 105 108 101 70
> 0020 105 108 101 40 34 49 50 51 52 53 54 46 99 115 34 41
> 0030 59 13 10
> 0033
> #
>
> octal, recognize the 033 at the beginning and the 015 at the end?
> # echo "\033&oFvar searchnum=12345;CompileFile(\"123456.cs\");\r" |hd -bo
> 0000 033 046 157 106 166 141 162 040 163 145 141 162 143 150 156 165
> 0010 155 075 061 062 063 064 065 073 103 157 155 160 151 154 145 106
> 0020 151 154 145 050 042 061 062 063 064 065 066 056 143 163 042 051
> 0030 073 015 012
> 0033
>
> or these ways are a little easier to read, they only show the really
> non-printable characters as decimal/octal codes and the print the plain
> character or the common backslash notation where possible:
>
> decimal
> # echo "\033&oFvar searchnum=12345;CompileFile(\"123456.cs\");\r" |hd -cd
> 0000 27 & o F v a r s e a r c h n u
> 0010 m = 1 2 3 4 5 ; C o m p i l e F
> 0020 i l e ( " 1 2 3 4 5 6 . c s " )
> 0030 ; \r \n
> 0033
>
> octal
> # echo "\033&oFvar searchnum=12345;CompileFile(\"123456.cs\");\r" |hd -co
> 0000 033 & o F v a r s e a r c h n u
> 0010 m = 1 2 3 4 5 ; C o m p i l e F
> 0020 i l e ( " 1 2 3 4 5 6 . c s " )
> 0030 ; \r \n
> 0033
>
> if you get "nothing" in your /tmp/capture
> then add stderr to the capture and see if you get a clueful error message
> in the capture fill this time.
>
> system "echo ......>/tmp/capture 2>&1"
>
> more /tmp/capture
> sh: CompileFile: no such command
>
> would tell you something is wrong with the quoting before the first ";"
> for example.
>
> Brian K. White -- brian at aljex.com -- http://www.aljex.com/bkw/
> +++++[>+++[>+++++>+++++++<<-]<-]>>+.>.+++++.+++++++.-.[>+<---]>++.
> filePro BBx Linux SCO FreeBSD #callahans Satriani Filk!
>
>
>
>
>
> then do
> _______________________________________________
> Filepro-list mailing list
> Filepro-list at lists.celestial.com
> http://mailman.celestial.com/mailman/listinfo/filepro-list
>
>
>
More information about the Filepro-list
mailing list