2016-12-25 22 views
8

Odczytując numer this thread, wygląda na to, że można go użyć do uruchomienia Rusta *.Jak wykonać kod Rusta bezpośrednio na systemach Unix? (używając shebangu)

#!/usr/bin/env rustc 

fn main() { 
    println!("Hello World!"); 
} 

Uczynienie tego pliku wykonywalnego i działającego powoduje kompilację, ale nie uruchomienie kodu.

chmod +x hello_world.rs 
./hello_world.rs 

Jednak to tylko kompiluje kod do hello_world.

Czy pliki *.rs mogą być wykonywane bezpośrednio, podobnie do skryptu powłoki?


* To odwołuje rustx, patrzyłem na to, ale jego skrypt bash, który kompiluje skrypt za każdym razem (bez buforowania) i nigdy nie usuwa plik z katalogu temp, chociaż może to ulec poprawie. Ma również istotne ograniczenia, że ​​nie może korzystać z skrzyń.

+1

https://github.com/killerswan/rustx? –

Odpowiedz

10

Jest cargo-script. Pozwala to również używać zależności.

Po zainstalowaniu cargo-script poprzez cargo install cargo-script, można utworzyć plik skryptu (hello.rs) tak:

#!/usr/bin/env run-cargo-script 

fn main() { 
    println!("Hello World!"); 
} 

Aby go wykonać, trzeba:

$ chmod +x hello.rs 
$ ./hello.rs 
    Compiling hello v0.1.0 (file://~/.cargo/.cargo/script-cache/file-hello-d746fc676c0590b) 
    Finished release [optimized] target(s) in 0.80 secs 
Hello World! 

Aby korzystać skrzynie z crates.io, zobacz samouczek w README powyżej.

1

To wydaje się działać:

#!/bin/sh 
//usr/bin/env rustc $0 -o a.out && ./a.out && rm ./a.out ; exit 

fn main() { 
    println!("Hello World!"); 
} 
+1

Nie będzie pracował dla niczego, co wymaga skrzyń. – Shepmaster

+2

'&&' nie zdoła usunąć 'a.out', jeśli uruchomienie' a.out' zwraca niezerowy kod zakończenia. – ideasman42