# Write a copy of the current script

**URL:** <https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432>\
**Category:** Ruby\
**Created:** [February 18, 2008, 3:50pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432 "2008-02-18T15:50:57Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 3:50pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/1 "2008-02-18T15:50:57Z")

</div>

I would like to write a copy of the current script being executed.  
I’ve attempted to use **FILE** and $0, but neither is returning the  
full path name of script. I get the file name, but not the path in  
which it resides. Anyone have a quick solution?

def initialize  
@script = $0 # Save where the script is from  
puts “[#{@script}]”  
end

returns “[AAN\_StandardSetup.rb]”

The script being run is a process setup, where the operations people  
fill in script parameters. The script then creates folder structures  
and performs particular functions. I want to save a copy of the  
script after the operations people have completed filling everything  
in. It would be saved in one of the folders created by the execution  
of the script. That’s my dilemma…I want to save it somewhere after  
it has started executing.

Tips and suggestions are appreciated.  
dvn

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 5:59pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/2 "2008-02-18T17:59:09Z")

</div>

Is there a particular reason you are having the “operations people”  
modify the script directly rather than having them modify a  
configuration file of some kind that the script reads? If there is a  
fixed set of parameters that need changed, reading them from a file is  
cleaner (YAML would be a good choice, here) than modifying the script,  
and then you can just copy the config file to an archive location when  
you load it.

Other than that, the only thing I can think of off the top of my head  
is having the script that is being edited not be the main script, but  
instead be required by a wrapper script that uses SCRIPT\_LINES\_\_ to  
capture the contents of the required file, and then archives it  
somewhere.

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 6:21pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/3 "2008-02-18T18:21:35Z")

</div>

On Feb 18, 10:58 am, Christopher D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> instead be required by a wrapper script that uses SCRIPT\_LINES\_\_ to
> 
> > def initialize  
> > in. It would be saved in one of the folders created by the execution  
> > of the script. That’s my dilemma…I want to save it somewhere after  
> > it has started executing.
> 
> > Tips and suggestions are appreciated.  
> > dvn

It’s a dog chasing its tail. The script is a configuration file. And  
the scripts job is to simplify the creation of the production folder  
structure, copy an applications configuration file, update its  
contents with user specified values and the folder structure  
information, and then execute the application. Using the script  
method was easier to implement. The operations people load the  
script, change some values, press “F5” to execute the script, and  
they’re done. The other scenario would involve them locating the  
configuration file, updating it and saving it, going somewhere else  
for the script, updating it and then running it.

I know it sounds piddly…but trust me. The operations people aren’t  
developers. They’re not the sharpest knives in the drawer. The  
company keeps pushing us to dumb things down so they can use less and  
less skilled people to do the work.

Thanks

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 9:00pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/4 "2008-02-18T21:00:59Z")

</div>

On Feb 18, 1:07 pm, Joel VanderWerf [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > returns “[AAN\_StandardSetup.rb]”
> 
> File.expand\_path( **FILE** )  
> File.expand\_path($0)
> 
> –  
> vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

I tried that. I got the dataset name and that’s it. Is it an O/S  
thing?

Thanks, dvn

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 9:09pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/5 "2008-02-18T21:09:17Z")

</div>

dkmd\_nielsen wrote:

> > > returns “[AAN\_StandardSetup.rb]”  
> > > File.expand\_path( **FILE** )  
> > > File.expand\_path($0)
> > 
> > –  
> > vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
> 
> I tried that. I got the dataset name and that’s it. Is it an O/S  
> thing?

What do you mean by dataset?

What OS are you using?

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 9:11pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/6 "2008-02-18T21:11:38Z")

</div>

dkmd\_nielsen wrote:

> On Feb 18, 1:07 pm, Joel VanderWerf [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > > returns “[AAN\_StandardSetup.rb]”
> > 
> > File.expand\_path( **FILE** )  
> > File.expand\_path($0)
> > 
> > –  
> > vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
> 
> I tried that. I got the dataset name and that’s it. Is it an O/S  
> thing?

Let’s find out. mac osx 10.4.7:

puts File.expand\_path( **FILE** )  
puts File.expand\_path($0)

–output:–  
/Users/me/2testing/dir1/r1test.rb  
/Users/me/2testing/dir1/r1test.rb

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 20, 2008, 4:15pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/7 "2008-02-20T16:15:29Z")

</div>

Looking through _The Ruby Way_ for something else, I ran into  
something that could be used here. If you end the source of your  
script with an **END** marker, you can call DATA.rewind (DATA is a  
global constant IO object for the source file that starts out at a  
position just after the **END** ) and then access the source code of  
through DATA.

---

<div class="post-metadata">

**Author:** ![dkmd\_nielsen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/958977/32.png) [@dkmd\_nielsen](https://www.ruby-forum.com/u/dkmd_nielsen)\
**Post date:** [February 18, 2008, 8:08pm UTC](https://www.ruby-forum.com/t/write-a-copy-of-the-current-script/129432/8 "2008-02-18T20:08:10Z")

</div>

dkmd\_nielsen wrote:

> returns “[AAN\_StandardSetup.rb]”  
> File.expand\_path( **FILE** )  
> File.expand\_path($0)
