Написание и запуск программ
Однострочники
Однострочники позволяют выполнить небольшие программы julia
без создания файла. Они создаются с использованием опции -e
команды julia
:
julia -e'name=ARGS[1]; println("hello, $name")' "Петя"
Создание программы в файле
Создать файл myprogram1
, (можно с расширением *.jl):
myprogram1.jl
В файле написать: println("Hello")
,сохранить.
Запустить из текущей директории можно командой:
<путь_до_julia>/julia ./myprogram1.jl
Если <путь_до_julia> находится в переменной окружения PATH
, то запускать можно без указания пути:
julia ./myprogram1.jl
Если установить права на исполнение файла:chmod +x myprogram1.jl
и в первой строке файла myprogram1.jl написать строку-"шабанг"
#! /usr/bin/env julia
println("Hello")
,то запускать программу из текущей директории можно командой:
./myprogram1.jl
или из любой директории командой:
<путь_до_программы>/myprogram1.jl
или, если путь до программы перечислен в PATH
, то без указания пути:
myprogram1.jl
Указать параметры запуска можно после через пробел после имени программы:
./myprogram1.jl "Петя"
или, что то же самое:
julia ./myprogram1.jl "Петя"
Принять параметры запуска в программе, можно, обратившись к массиву ARGS
:
name=ARGS[1]
println("Привет, $name")
Имя программы находится в переменной PROGRAM_FILE
. Это имя передается оболочкой при запуске программы. В REPL и однострочниках эта переменная будет пустой строкой.
Пример
Основываясь на значении PROGRAM_FILE
можно определить поведение программы: выполнять функцию main
только при запуске из командной строки. При работе в REPL
, main
не запускается:
#!/usr/bin/env julia
main(::Void) = nothing
function main(prg)
info("Program:" * prg.match * " Path:" * prg[:path] * " Basename:" * prg[:basename])
info("Arguments are: $ARGS")
# function body
end
# другие определения
# program start here:
main( match(r"(?<path>.+/)(?<basename>.+)$",PROGRAM_FILE) )
#=
Кстати, в коде программ (и в REPL) можно пользоваться
многострочными комментариями, такими, как этот.
=#
Т.к. до вызова main
с параметрами, выше идут только определения, то main
оказывается точкой входа в программу. Если имя PROGRAM_FILE
оказалось пустым, то оно не подпадает под регялярное выражение r"(?<path>.+/)(?<basename>.+)$"
и функции main
передается параметр типа Void
. Иначе на входе main
имеется RegexMatch
, который можно использовать, для получения полного имени программы, а также его частей.
shell> ./myprogram.jl a b c
INFO: Program:./myprogram.jl Path:./ Basename:myprogram.jl
INFO: Arguments are: String["a","b","c"]