Написание и запуск программ

Однострочники

Однострочники позволяют выполнить небольшие программы 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"]

results matching ""

    No results matching ""