script with -e command line option???

S

Suresh Unadrad

If I type in the following example from "Programming Ruby", I get an
error:

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

This is from a BASH command line on a linux system with ruby 1.8.4

At first I thought it was a problem with BASH interfering with quoting
or something, but I've tried many variations with no luck. Any idea?

thanks,

--su
 
W

Wolfgang Nádasi-Donner

Suresh said:
If I type in the following example from "Programming Ruby", I get an
error:

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

This is from a BASH command line on a linux system with ruby 1.8.4

My answer is from Windows 2000, Ruby 1.8.5, but the reason may be, that there is
no file in your directory which mathes "*.txt"

C:\Dokumente und Einstellungen\wolfgang\Desktop>type otto.txt
Hello, world!

I'm here to wombat all thinks,
whatever wombat means...
C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby -n -e "print if /wombat/" *.txt
I'm here to wombat all thinks,
whatever wombat means...

Wolfgang Nádasi-Donner
 
R

Rob Biedenharn

My answer is from Windows 2000, Ruby 1.8.5, but the reason may be, =20
that there is no file in your directory which mathes "*.txt"


C:\Dokumente und Einstellungen\wolfgang\Desktop>type otto.txt
Hello, world!

I'm here to wombat all thinks,
whatever wombat means...
C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby -n -e "print =20
if /wombat/" *.txt
I'm here to wombat all thinks,
whatever wombat means...


Wolfgang N=E1dasi-Donner

I suspect Wolfgang is correct. The output that I get is:

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - *.txt (Errno::ENOENT)

Are you copying the exact message? It's odd that it thinks "if" is =20
the name. When the file exists it appears to do what you probably =20
expected.

$ ls
README app config doc log script tmp
Rakefile components db lib public test vendor
$ ruby -n -e "print if /wombat/" README*
$ ruby -n -e "print if /Congratulations/" README*
2. Go to http://localhost:3000/ and get "Congratulations, you've put =20
Ruby on Rails!"
3. Follow the guidelines on the "Congratulations, you've put Ruby on =20
Rails!" screen

Sorry, I didn't make a new .txt file, but just used what was handy.

-Rob


Rob Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 
S

Suresh Unadrad

Wolfgang said:
My answer is from Windows 2000, Ruby 1.8.5, but the reason may be, that
there is
no file in your directory which mathes "*.txt"

no, that's not my problem. oh - but this reminds me that if i just use
something like "print" for the command line command, then it works fine:

$ ls *.txt
test.txt

$ more test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print if /wombat/" test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print" test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print" if test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

so it seems clear that ruby isn't getting the entire -e argument,
probably due to intereference by BASH. anyone know how to fix this?

--su
 
R

Rob Biedenharn

$ ruby -n -e "print" if test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

so it seems clear that ruby isn't getting the entire -e argument,
probably due to intereference by BASH. anyone know how to fix this?

--su

Well, the first thing to try is changing the kind of quotes.

$ ruby -n -e 'print if /wombat/' test.txt

If that doesn't work, I'd start to suspect that you have "ruby"
defined as an alias or something to make the args be evaluated twice.

-Rob

Rob Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 
R

Robert Klemme

no, that's not my problem. oh - but this reminds me that if i just use
something like "print" for the command line command, then it works fine:

$ ls *.txt
test.txt

$ more test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print if /wombat/" test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print" test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print" if test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

so it seems clear that ruby isn't getting the entire -e argument,
probably due to intereference by BASH. anyone know how to fix this?

This looks like "ruby" was a shell script that does not properly quote
arguments because ruby thinks the first word after "print" is a file
name. Here you can see the effect:

robert@fussel ~
$ ./aa -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

robert@fussel ~
$ cat aa
#!/bin/sh -f

ruby $*


robert@fussel ~
$

Kind regards

robert
 
J

jab3

no, that's not my problem. oh - but this reminds me that if i just
use something like "print" for the command line command, then it
works fine:

$ ls *.txt
test.txt

$ more test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print if /wombat/" test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

jab3:~% cat > wombat.txt
I wish I had a fish.
I wish I had a wombat.
=46ish are tasty.
Wombats are tasty too.
jab3:~% ruby -n -e "print if /wombat/" *.txt
I wish I had a wombat.
jab3:~%

Something is screwy with your setup. Note that it is complaining that=20
the file 'if' doesn't exist. You could try something like this and see=20
if it works:

ruby -n -e "$stdout.print if /wombat/" *.txt

Why it thinks that 'if' should be a file I'm not sure about.

=2Djab3
 
S

Suresh Unadrad

Robert said:
This looks like "ruby" was a shell script that does not properly quote
arguments

Rob said:
I'd start to suspect that you have "ruby"
defined as an alias or something to make the args be evaluated twice.

Turns out that this was indeed the problem. When I started using the
ruby fltk extensions, I found that I had to replace /usr/bin/ruby with
the following script:

#!/bin/bash

export LD_ASSUME_KERNEL=2.3.98
exec /usr/bin/ruby1.8 $*


so that's why the arguments were being evaluated twice.

thanks everyone for your help!

--su
 
R

Robert Klemme

Turns out that this was indeed the problem. When I started using the
ruby fltk extensions, I found that I had to replace /usr/bin/ruby with
the following script:

#!/bin/bash

export LD_ASSUME_KERNEL=2.3.98
exec /usr/bin/ruby1.8 $*


so that's why the arguments were being evaluated twice.

thanks everyone for your help!


You can easily fix that script with this line which will do proper quoting:

exec /usr/bin/ruby1.8 "$@"

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,228
Messages
2,571,157
Members
47,785
Latest member
deepusaini

Latest Threads

Top