From: Maurice <ma...@bc...> - 2014-02-27 16:34:40
|
Just come across weirdly inconsistent results when passing "?" as an argument. What have I overlooked, I wonder... Given the test program called 'odd': #! /usr/bin/rexx parse arg given . say "/"given"/" then using ooRexx-4.1.1.opensuse1140.i586.rpm on Linux Mageia-3, I get the following inconsistencies between laptop and desktop machines using the same version of ooRexx and Mageia-3: Laptop: $rexx ~/rx/odd ? /?/ $ rexx ~/rx/odd ?? /rx/ ]$ rexx ~/rx/odd ??? /bin/ Desktop: $ rexx ~/rx/odd ? /A/ <-----------------Note! $ rexx ~/rx/odd ?? /rx/ $ rexx ~/rx/odd ??? /bin/ Questions: (1) With one "?", why do laptop and desktop yield different results? (2) Why the unexpected results with strings of multiple "?"s? What characteristics of "?" as an argument have I accidentally hit?! -- /\/\aurice (Retired in Surrey, UK) Registered Linux User #487649 Linux 32-bit Mageia-3: Pan 0.139 KDE 4.10.5 Virtualbox 4.2.16 Firefox 24.2 KMail 4.10.5 |
From: Mark M. <mie...@gm...> - 2014-02-27 16:55:39
|
On Thu, Feb 27, 2014 at 8:34 AM, Maurice <ma...@bc...> wrote: > Just come across weirdly inconsistent results when passing "?" as an > argument. What have I overlooked, I wonder... > In most shells, including Windows, the ? is a file wildcard character. You shouldn't try to pass it as an argument to a program. > > Given the test program called 'odd': > > #! /usr/bin/rexx > parse arg given . > say "/"given"/" > > then using ooRexx-4.1.1.opensuse1140.i586.rpm on Linux Mageia-3, I > get the following inconsistencies between laptop and desktop machines > using the same version of ooRexx and Mageia-3: > > Laptop: > > $rexx ~/rx/odd ? > /?/ > $ rexx ~/rx/odd ?? > /rx/ > ]$ rexx ~/rx/odd ??? > /bin/ > > Desktop: > > $ rexx ~/rx/odd ? > /A/ <-----------------Note! > $ rexx ~/rx/odd ?? > /rx/ > $ rexx ~/rx/odd ??? > /bin/ > > Questions: > (1) With one "?", why do laptop and desktop yield different results? > You have different files in the rx directory on the different machines I would think. On one you have a file A and on the other you have no single letter files. > (2) Why the unexpected results with strings of multiple "?"s? > I'm not sure that they are unexpected. rx matches ?? It is a 2 character file / directory name. ??? matches bin, it is a 3 character file / directory name. -- Mark Miesfeld |
From: Chip D. <ch...@av...> - 2014-02-27 20:22:54
|
Mark is right, of course. Keep in mind that you are not passing '?' to Rexx per se; you're passing it as the second argument to the shell, which reads the shebang line at the top of your script and forks a child shell to run the Rexx interpreter. Meanwhile the shell has already processed the command line in many ways, not the least of which is to expand what it assumes are filename patterns into a list of explicit filenames ("file globbing"). In Unix shells, the '?' means "exactly one arbitrary character". See the Wikipedia page "glob (programming)" for a table of the subtle differences of its interpretation across different platforms. So your shell was looking for a matching filename of exactly one (or two or three) characters and provided the first one it found. That's why you got different answers on different systems. Just for grins and giggles, try $ set -o noglob $ rexx odd ?? and it should give you what you expected. -Chip- On 2/27/2014 11:55 AM Mark Miesfeld said: > > On Thu, Feb 27, 2014 at 8:34 AM, Maurice <ma...@bc... > <mailto:ma...@bc...>> wrote: > > Just come across weirdly inconsistent results when passing "?" as an > argument. What have I overlooked, I wonder... > > > In most shells, including Windows, the ? is a file wildcard character. > You shouldn't try to pass it as an argument to a program. > > > Given the test program called 'odd': > > #! /usr/bin/rexx > parse arg given . > say "/"given"/" > > then using ooRexx-4.1.1.opensuse1140.i586.rpm on Linux Mageia-3, I > get the following inconsistencies between laptop and desktop machines > using the same version of ooRexx and Mageia-3: > > Laptop: > > $rexx ~/rx/odd ? > /?/ > $ rexx ~/rx/odd ?? > /rx/ > ]$ rexx ~/rx/odd ??? > /bin/ > > Desktop: > > $ rexx ~/rx/odd ? > /A/ <-----------------Note! > $ rexx ~/rx/odd ?? > /rx/ > $ rexx ~/rx/odd ??? > /bin/ > > Questions: > (1) With one "?", why do laptop and desktop yield different > results? > > > You have different files in the rx directory on the different machines > I would think. On one you have a file A and on the other you have no > single letter files. > > (2) Why the unexpected results with strings of multiple "?"s? > > > I'm not sure that they are unexpected. rx matches ?? It is a 2 > character file / directory name. > ??? matches bin, it is a 3 character file / directory name. > > -- > Mark Miesfeld > > > > ------------------------------------------------------------------------------ > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk > > > > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > |
From: Maurice <ma...@bc...> - 2014-02-28 15:42:13
|
On Thu, 27 Feb 2014 08:55:32 -0800, Mark Miesfeld wrote: > On one you have a file A and on the other you have no single > letter files. Bang on the mark! (Was not even aware I had a file 'A'...) Back in my days on VM/CMS, we Rexx users often used a "?" argument to mean 'Show me help info'. Having moved to Linux I had clean overlooked the shell's substitution powers, but got away with it where there was no 'A' file... -- /\/\aurice |
From: Mark M. <mie...@gm...> - 2014-02-28 16:31:53
|
On Fri, Feb 28, 2014 at 7:41 AM, Maurice <ma...@bc...> wrote: > > Back in my days on VM/CMS, we Rexx users often used a "?" argument to > mean 'Show me help info'. > Linux applications typically use -h for help. Or --help for a lot of help. Windows applications often use /? for help -- Mark Miesfeld |
From: Staffan T. <sta...@gm...> - 2014-02-28 17:29:33
|
Sorry to jump in here but please help me understand: which statement in the rexx program is it that invokes the shell so that it starts looking for matching file names? In the code that I saw there was only a say statement so I don't understand what's going on. Staffan On Fri, Feb 28, 2014 at 5:31 PM, Mark Miesfeld <mie...@gm...> wrote: > On Fri, Feb 28, 2014 at 7:41 AM, Maurice <ma...@bc...> wrote: > >> >> Back in my days on VM/CMS, we Rexx users often used a "?" argument to >> mean 'Show me help info'. >> > > Linux applications typically use -h for help. Or --help for a lot of help. > > Windows applications often use /? for help > > -- > Mark Miesfeld > > > > ------------------------------------------------------------------------------ > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > > http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Mark M. <mie...@gm...> - 2014-02-28 17:53:31
|
On Fri, Feb 28, 2014 at 9:29 AM, Staffan Tylen <sta...@gm...>wrote: > Sorry to jump in here but please help me understand: which statement in > the rexx program is it that invokes the shell so that it starts looking for > matching file names? In the code that I saw there was only a say statement > so I don't understand what's going on. > No statement in the Rexx program invokes the shell. It is this line: $rexx ~/rx/odd ? typed on the command line that <invokes> the shell. Although invokes is not really a good word. The shell has already been invoked and is sitting in a loop parsing stuff that is typed on the command line. The shell determines that odd is a file name and an executable file at that, uses the shebang line to determine the rexx executes the file. It then passes the file name and the command line arguments to rexx. As Chip said, the command line parsing does a lot, and I'm sure different shells do it in different order. But most, if not all, shells expand file name patterns and pass each individual, expanded, file name as arguments to the executable. In the program: #! /usr/bin/rexx parse arg given . say "/"given"/" Maurice drops everything after the first word in the argument list. But there could theoretically be many file names passed into the program. At least for ???. We see bin, but that could be followed with cat, dog, fog, hhh, and so on. -- Mark Miesfeld |
From: Mark M. <mie...@gm...> - 2014-02-28 17:59:27
|
On Fri, Feb 28, 2014 at 9:53 AM, Mark Miesfeld <mie...@gm...> wrote: > > No statement in the Rexx program invokes the shell. It is this line: > > $rexx ~/rx/odd ? > > typed on the command line that <invokes> the shell. Although invokes is > not really a good word. The shell has already been invoked and is sitting > in a loop parsing stuff that is typed on the command line. > > The shell determines that odd is a file name and an executable file at > that, uses the shebang line to determine the rexx executes the file. It > then passes the file name and the command line arguments to rexx. > Well, that's not really correct, I didn't read that closely enough. The shell determines the first token on the command line is an executable file, rexx, and expands the rest of the command line into arguments it passes to rexx. -- Mark Miesfeld |
From: Staffan T. <sta...@gm...> - 2014-02-28 18:32:12
|
Having very limited linux background I'm trying to understand this but I don't believe I do (nothing wrong with your explanation Mark, I'm just thick!). Well, you say that shell behaves differently but I guess this discussion only applies to linux or unix. Running this from a Windows prompt I see no such behaviour. But in linux, do the question mark(s) get passed to the rexx program (I didn't see any signs of that) or do they get eaten by the shell parser? Sorry for being a nut-case, I blame my parents :) On Fri, Feb 28, 2014 at 6:59 PM, Mark Miesfeld <mie...@gm...> wrote: > > On Fri, Feb 28, 2014 at 9:53 AM, Mark Miesfeld <mie...@gm...> wrote: > >> >> No statement in the Rexx program invokes the shell. It is this line: >> >> $rexx ~/rx/odd ? >> >> typed on the command line that <invokes> the shell. Although invokes is >> not really a good word. The shell has already been invoked and is sitting >> in a loop parsing stuff that is typed on the command line. >> >> The shell determines that odd is a file name and an executable file at >> that, uses the shebang line to determine the rexx executes the file. It >> then passes the file name and the command line arguments to rexx. >> > > Well, that's not really correct, I didn't read that closely enough. The > shell determines the first token on the command line is an executable file, > rexx, and expands the rest of the command line into arguments it passes to > rexx. > > -- > Mark Miesfeld > > > ------------------------------------------------------------------------------ > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > > http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Rick M. <obj...@gm...> - 2014-02-28 18:37:29
|
Here's a decent explanation of what's going on: http://en.wikipedia.org/wiki/Glob_(programming) And yes, this is a unix thing. The command shell will automatically perform file name expansion on commands before the target program is even invoked. For example, using an argument like "*.log" will expand the argument into a list of file names that match that pattern, passed as separate arguments. All of this takes place in the command shell before the target program is invoked. Rick On Fri, Feb 28, 2014 at 1:31 PM, Staffan Tylen <sta...@gm...>wrote: > Having very limited linux background I'm trying to understand this but I > don't believe I do (nothing wrong with your explanation Mark, I'm just > thick!). Well, you say that shell behaves differently but I guess this > discussion only applies to linux or unix. Running this from a Windows > prompt I see no such behaviour. But in linux, do the question mark(s) get > passed to the rexx program (I didn't see any signs of that) or do they get > eaten by the shell parser? Sorry for being a nut-case, I blame my parents :) > > > > On Fri, Feb 28, 2014 at 6:59 PM, Mark Miesfeld <mie...@gm...> wrote: > >> >> On Fri, Feb 28, 2014 at 9:53 AM, Mark Miesfeld <mie...@gm...>wrote: >> >>> >>> No statement in the Rexx program invokes the shell. It is this line: >>> >>> $rexx ~/rx/odd ? >>> >>> typed on the command line that <invokes> the shell. Although invokes is >>> not really a good word. The shell has already been invoked and is sitting >>> in a loop parsing stuff that is typed on the command line. >>> >>> The shell determines that odd is a file name and an executable file at >>> that, uses the shebang line to determine the rexx executes the file. It >>> then passes the file name and the command line arguments to rexx. >>> >> >> Well, that's not really correct, I didn't read that closely enough. The >> shell determines the first token on the command line is an executable file, >> rexx, and expands the rest of the command line into arguments it passes to >> rexx. >> >> -- >> Mark Miesfeld >> >> >> ------------------------------------------------------------------------------ >> Flow-based real-time traffic analytics software. Cisco certified tool. >> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer >> Customize your own dashboards, set traffic alerts and generate reports. >> Network behavioral analysis & security monitoring. All-in-one tool. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk >> _______________________________________________ >> Oorexx-users mailing list >> Oor...@li... >> https://lists.sourceforge.net/lists/listinfo/oorexx-users >> >> > > > ------------------------------------------------------------------------------ > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > > http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Staffan T. <sta...@gm...> - 2014-02-28 18:41:31
|
Aaah, the clouds start to drift away. Many thanks. Staffan On Fri, Feb 28, 2014 at 7:37 PM, Rick McGuire <obj...@gm...> wrote: > Here's a decent explanation of what's going on: > > http://en.wikipedia.org/wiki/Glob_(programming) > > And yes, this is a unix thing. The command shell will automatically > perform file name expansion on commands before the target program is even > invoked. For example, using an argument like "*.log" will expand the > argument into a list of file names that match that pattern, passed as > separate arguments. All of this takes place in the command shell before > the target program is invoked. > > Rick > > > On Fri, Feb 28, 2014 at 1:31 PM, Staffan Tylen <sta...@gm...>wrote: > >> Having very limited linux background I'm trying to understand this but I >> don't believe I do (nothing wrong with your explanation Mark, I'm just >> thick!). Well, you say that shell behaves differently but I guess this >> discussion only applies to linux or unix. Running this from a Windows >> prompt I see no such behaviour. But in linux, do the question mark(s) get >> passed to the rexx program (I didn't see any signs of that) or do they get >> eaten by the shell parser? Sorry for being a nut-case, I blame my parents :) >> >> >> >> On Fri, Feb 28, 2014 at 6:59 PM, Mark Miesfeld <mie...@gm...>wrote: >> >>> >>> On Fri, Feb 28, 2014 at 9:53 AM, Mark Miesfeld <mie...@gm...>wrote: >>> >>>> >>>> No statement in the Rexx program invokes the shell. It is this line: >>>> >>>> $rexx ~/rx/odd ? >>>> >>>> typed on the command line that <invokes> the shell. Although invokes >>>> is not really a good word. The shell has already been invoked and is >>>> sitting in a loop parsing stuff that is typed on the command line. >>>> >>>> The shell determines that odd is a file name and an executable file at >>>> that, uses the shebang line to determine the rexx executes the file. It >>>> then passes the file name and the command line arguments to rexx. >>>> >>> >>> Well, that's not really correct, I didn't read that closely enough. The >>> shell determines the first token on the command line is an executable file, >>> rexx, and expands the rest of the command line into arguments it passes to >>> rexx. >>> >>> -- >>> Mark Miesfeld >>> >>> >>> ------------------------------------------------------------------------------ >>> Flow-based real-time traffic analytics software. Cisco certified tool. >>> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer >>> Customize your own dashboards, set traffic alerts and generate reports. >>> Network behavioral analysis & security monitoring. All-in-one tool. >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Oorexx-users mailing list >>> Oor...@li... >>> https://lists.sourceforge.net/lists/listinfo/oorexx-users >>> >>> >> >> >> ------------------------------------------------------------------------------ >> Flow-based real-time traffic analytics software. Cisco certified tool. >> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer >> Customize your own dashboards, set traffic alerts and generate reports. >> Network behavioral analysis & security monitoring. All-in-one tool. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk >> _______________________________________________ >> Oorexx-users mailing list >> Oor...@li... >> https://lists.sourceforge.net/lists/listinfo/oorexx-users >> >> > > > ------------------------------------------------------------------------------ > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > > http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Mark M. <mie...@gm...> - 2014-02-28 18:57:32
|
Well, I was going to write that Linux / Unix shells do file globbing by default. Whereas on Windows, it is not done by default. But you can link in an object file to an application that will change that so it is done by default. -- Mark Miesfeld On Fri, Feb 28, 2014 at 10:41 AM, Staffan Tylen <sta...@gm...>wrote: > Aaah, the clouds start to drift away. Many thanks. > > Staffan > > > > On Fri, Feb 28, 2014 at 7:37 PM, Rick McGuire <obj...@gm...>wrote: > >> Here's a decent explanation of what's going on: >> >> http://en.wikipedia.org/wiki/Glob_(programming) >> >> And yes, this is a unix thing. The command shell will automatically >> perform file name expansion on commands before the target program is even >> invoked. For example, using an argument like "*.log" will expand the >> argument into a list of file names that match that pattern, passed as >> separate arguments. All of this takes place in the command shell before >> the target program is invoked. >> >> Rick >> >> >> On Fri, Feb 28, 2014 at 1:31 PM, Staffan Tylen <sta...@gm...>wrote: >> >>> Having very limited linux background I'm trying to understand this but I >>> don't believe I do (nothing wrong with your explanation Mark, I'm just >>> thick!). Well, you say that shell behaves differently but I guess this >>> discussion only applies to linux or unix. Running this from a Windows >>> prompt I see no such behaviour. But in linux, do the question mark(s) get >>> passed to the rexx program (I didn't see any signs of that) or do they get >>> eaten by the shell parser? Sorry for being a nut-case, I blame my parents :) >>> >>> >>> >>> On Fri, Feb 28, 2014 at 6:59 PM, Mark Miesfeld <mie...@gm...>wrote: >>> >>>> >>>> On Fri, Feb 28, 2014 at 9:53 AM, Mark Miesfeld <mie...@gm...>wrote: >>>> >>>>> >>>>> No statement in the Rexx program invokes the shell. It is this line: >>>>> >>>>> $rexx ~/rx/odd ? >>>>> >>>>> typed on the command line that <invokes> the shell. Although invokes >>>>> is not really a good word. The shell has already been invoked and is >>>>> sitting in a loop parsing stuff that is typed on the command line. >>>>> >>>>> The shell determines that odd is a file name and an executable file at >>>>> that, uses the shebang line to determine the rexx executes the file. It >>>>> then passes the file name and the command line arguments to rexx. >>>>> >>>> >>>> Well, that's not really correct, I didn't read that closely enough. >>>> The shell determines the first token on the command line is an executable >>>> file, rexx, and expands the rest of the command line into arguments it >>>> passes to rexx. >>>> >>>> -- >>>> Mark Miesfeld >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Flow-based real-time traffic analytics software. Cisco certified tool. >>>> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer >>>> Customize your own dashboards, set traffic alerts and generate reports. >>>> Network behavioral analysis & security monitoring. All-in-one tool. >>>> >>>> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk >>>> _______________________________________________ >>>> Oorexx-users mailing list >>>> Oor...@li... >>>> https://lists.sourceforge.net/lists/listinfo/oorexx-users >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Flow-based real-time traffic analytics software. Cisco certified tool. >>> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer >>> Customize your own dashboards, set traffic alerts and generate reports. >>> Network behavioral analysis & security monitoring. All-in-one tool. >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Oorexx-users mailing list >>> Oor...@li... >>> https://lists.sourceforge.net/lists/listinfo/oorexx-users >>> >>> >> >> >> ------------------------------------------------------------------------------ >> Flow-based real-time traffic analytics software. Cisco certified tool. >> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer >> Customize your own dashboards, set traffic alerts and generate reports. >> Network behavioral analysis & security monitoring. All-in-one tool. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk >> _______________________________________________ >> Oorexx-users mailing list >> Oor...@li... >> https://lists.sourceforge.net/lists/listinfo/oorexx-users >> >> > > > ------------------------------------------------------------------------------ > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > > http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |