Print itself
Create a program, which prints its source code to the stdout!
- Related tasks
Furor
<lang Furor> 1 argv getfile dup sprint free end </lang>
Go
<lang go>package main
import (
"fmt" "io/ioutil" "log" "os" "path"
)
func main() {
self := path.Base(os.Args[0]) + ".go" bytes, err := ioutil.ReadFile(self) if err != nil { log.Fatal(err) } fmt.Print(string(bytes))
}</lang>
- Output:
Just the invoking line as remainder is, of course, as above.
$ go run self_print.go
Phix
You can drop the substitute() if you plan to interpret rather than compile it.
It will not work, obviously, if you compile it (say test.exw) to test.exe and then either rename the executable or move it to some directory where there is no test.exw
<lang Phix>puts(1,get_text(substitute(command_line()[2],".exe",".exw")))</lang>
- Output:
>p test ;; or p -c test puts(1,get_text(substitute(command_line()[2],".exe",".exw")))
Raku
Not really sure what the point of this task is.
Is it supposed to be a quine? <lang perl6>my &f = {say $^s, $^s.raku;}; f "my \&f = \{say \$^s, \$^s.raku;}; f " </lang>
Or just a program that when executed echoes its source to STDOUT? (Here's probably the simplest valid program that when executed, echoes its source to STDOUT. It is exceptionally short: zero bytes; and when executed echoes zero bytes to STDOUT.)
<lang perl6></lang>
Or are we supposed to demonstrate how to locate the currently executing source code file and incidentally, print it.
<lang perl6>print $*PROGRAM.slurp</lang>
Whatever. Any of these satisfy the rather vague specifications.
REXX
<lang rexx>/*REXX program prints its own multi─line source to the standard output (stdout). */
do j=1 for sourceline() call lineout , sourceline(j) end /*j*/ /*stick a fork in it, we're all done. */</lang>
Ring
<lang ring> load "stdlib.ring"
fileName = filename() fp = fopen(fileName,"r") while not feof(fp)
see Readline(fp)
end fclose(fp) </lang>
- Output:
load "stdlib.ring" fileName = filename() fp = fopen(fileName,"r") while not feof(fp) see Readline(fp) end fclose(fp)
Wren
<lang ecmascript>import "os" for Process import "io" for File
var args = Process.allArguments System.write(File.read(args[1]))</lang>
- Output:
Just the invoking line as remainder is, of course, as above.
$ wren self_print.wren