Skrypty shellowe w railsach

Witam

mam pytanie , a własciwie prośbe czy wie ktoś jak za pomocą railsów obsługiwać skrypty basha oraz perla ?
chodzi mi o to zeby na stornie po kliknieciu na przykladowy button dalo sie wykonac okreslony skrypt znajdujacy sie na serwerze.

Najprostsza droga: możesz wywoływać polecenia shella, umieszczając je w kodzie wewnątrz znaków “`”, np.

class RemoteController def show_art @result = `cat art.txt` end end
Oczywiście, musisz być świadomym zagrożeń, które mogą powstać przy nieuważnym stosowaniu wywołań zewnętrznych programów na serwerze.

Napisalem stronke ktora dziala tylko w sieci LAN , wiec chyba duzych szkod nie narobi?
dopisze ta klase do kontrolera , to bedzie sie ona wykonywac w momencie otwarcia danego kontrolera ? prawda ?
a jak mozna by bylo dodac zmienne ? i czy mogloby to byc z poziomu przegladrki ?

[quote=benythakilla]Napisalem stronke ktora dziala tylko w sieci LAN , wiec chyba duzych szkod nie narobi?
dopisze ta klase do kontrolera , to bedzie sie ona wykonywac w momencie otwarcia danego kontrolera ? prawda ?[/quote]
Dopisz wylacznie metode. Jezeli chcesz ja wywolac w czasie wywolania kontrolera, umiesc w before_filter badz w kontruktorze.

Aby bylo skladnie i ladnie mozesz uzyc metody system. Na przyklad:

[code=Ruby]source = ‘/tmp/file1’
destination = ‘/home/users/me’

system(“cp”, source, destination) # => wywola w systemie polecenie ‘cp /tmp/file1 /home/users/me’[/code]

Wlasnie ze wzgledu bezpieczenstwa lepiej nie przekazywac zmiennych z poziomu przegladarki. Ktos moglby przeslac do Twojej aplikacji np. rm -f *.
Ale mozesz to dobrze odfiltrowac albo dac dostep wylacznie do wybranych polecen.

Ale przede wszystkim… Co Cie zmusza do tego, zeby odpalac skrypt w systemie zamiast zrobic to w aplikacji?

dzieki bardzo za pomoc.wlasciwiwie dlatego zmierzam zeby to bylo z poziomu przegladrki …bo ludzie ktorzy beda to obslugiwac nie potrafia wlaczyc nawet konsoli w linuksie.

To tym bardziej nie powinni mieć do tej konsoli dostępu… :slight_smile:

a mam pytanie , a jak wlasciwie wywolac inny plik na tej samej zasadzie skrypt perlowy. naprzyklad test.pl znajdujacy sie na pulpicie

Analogicznie

system("perl /sciezka/do/skryptu.pl")

Analogicznie. Uzywanie polecen system, exec, czy tez operatora polecenia systemowego, wyglada tak samo, jak uzycie konsoli.

Jezeli wiec chcesz wywolac skrypt z Pulpitu, moze to wygladac na przyklad tak:

`/home/users/me/Desktop/test.pl`

przyklad w skrypcie Tets.sh napislaem jedna komende o stworzenie pliku i logi wyrzucaja mi

touch: cannot touch `1.txt’: Permission denied

to jak moge zmienic uprawniena?

Może najpierw poczytaj o linuxach, a później będziesz pytał o railsy/rubiego.

dobra moze faktycznie nie bylo to za madre pytanie :).
Ale o jeszcze jedna rzecz zapytam
Mam pole teksotwe w formularzu, chcialbym przekazac warotosc tego pola do zmiennej i uzyc jej jako parametru do wykonywanego skryptu.
jak do polecenia system(’ ') dac zmienną ? powiedzmy

                           @beny = perl /sciezka/do/skryptu.pl
                           system('@beny')

prosze o pomoc

system("echo", "hello")

[code]>> puts File.read("/tmp/hello.rb")
puts “Hello #{ARGV.join(”, “)}!”
=> nil

system(“ruby”, “/tmp/hello.rb”, “benythakilla”)
Hello benythakilla!
=> true[/code]

no tak , tyle ze mi wlasnie chodzi o cos innego

czy w poleceniu system moge dac zmienna ktora bedzie wskazywac na sciezke do skryptu.
Wiem ze ponizszy przyklad jest skladniowo zle napisany ale przedstawia to o co mi chodzi , szukalem na wielu forach i nie znalazlem.

                          @beny = perl /sciezka/do/skryptu.pl
                          @parametr=1.txt

                                          system('@beny' , '@parametr')

pozdrawiam

[quote=benythakilla]no tak , tyle ze mi wlasnie chodzi o cos innego

czy w poleceniu system moge dac zmienna ktora bedzie wskazywac na sciezke do skryptu.
Wiem ze ponizszy przyklad jest skladniowo zle napisany ale przedstawia to o co mi chodzi , szukalem na wielu forach i nie znalazlem.

                          @beny = perl /sciezka/do/skryptu.pl
                          @parametr=1.txt

                                          system('@beny' , '@parametr')

pozdrawiam[/quote]
Może to pomoże

system("#{@beny} #{@parametr}") # koniecznie czuczysłów nie apostrof

Oczywiscie, przeciez system to najzwyklejsza metoda. Co za roznica, czy podasz lancuch, czy zmienna zawierajaca na lancuch.

system('cp', 'file.txt', '/catalog')

[code=Ruby]order = ‘cp’
file = ‘file.txt’
catalog = ‘/catalog’

system(order, file, catalog)[/code]
Przyklady 1. i 2. sa semantycznie rownowazne.