jaki jest pożytek z "#!/usr/local/bin / ruby-w" na początku programu ruby
Jaki jest sens pisania następującego polecenia na początku programu ruby ?
#!/usr/local/bin/ruby -w
Czy jest to polecenie specyficzne dla systemu operacyjnego? Czy jest on ważny dla ruby w systemie windows ? jeśli nie, to jakie jest równoważne polecenie w systemie windows ?
3 answers
Linia Shebang jest opcjonalna, a jeśli uruchomisz interpreter ruby i przekażesz do niego skrypt jako argument wiersza poleceń, to flagi ustawione w wierszu poleceń są flagami, z którymi uruchamia się ruby.
Linia Shebang w ogóle nie jest ruby (chyba że chcesz nazwać ją komentarzem ruby). To naprawdę shell scripting. Większość użytkowników Linuksa i Uniksa korzysta z powłoki BASH (skrót od Borne Again SHell), ale prawie każdy system operacyjny ma interpreter poleceń, który będzie honorował Ona.
"#!/usr / local/bin / ruby-w "
Część "ona" to oktotorp ( # ), aka znak funta, znak cyfry, znak hash, a teraz hash tag (nadal nazywam to tic-tac-toe po prostu cuz).
Część "bang" to znak wykrzyknika (!), i to jest jak Walenie pięścią w stół, aby wykrzyknąć polecenie.
W systemie Windows" powłoka " jest wierszem polecenia, ale nawet bez czarnego okna DOS, interpreter poleceń uruchomi skrypt w oparciu o skojarzenia plików. Nie ma naprawdę ma znaczenie, czy interpreter poleceń lub język programowania czyta shebang i upewnia się, że flagi są honorowane, ważne jest, że są honorowane.
" - w " jest flagą. Zasadniczo jest to instrukcja do wykonania przez ruby podczas uruchamiania skryptu. W tym przypadku "- w " włącza ostrzeżenia, więc otrzymasz dodatkowe Ostrzeżenia (skrypt działa) lub błędy (skrypt przestaje działać) podczas wykonywania skryptu. Ostrzeżenia i wyjątki mogą być wyłapywane i stosowane podczas program. Pomagają one programistom znaleźć problemy, które prowadzą do nieoczekiwanego zachowania.
Jestem fanem szybkich i brudnych skryptów, aby wykonać zadanie, więc nie -w. jestem również fanem wysokiej jakości kodowania wielokrotnego użytku, więc zdecydowanie używaj -w. odpowiedniego narzędzia do właściwej pracy. Jeśli się uczysz, to Zawsze używaj -W. kiedy wiesz, co robisz i przestaniesz używać-w do szybkich zadań, zaczniesz zastanawiać się, kiedy pomogłoby użycie-w zamiast spędzać godziny na rozwiązywaniu problemów. (Podpowiedź, gdy przyczyna problemu nie jest dość oczywiste, wystarczy dodać -w i uruchomić go, aby zobaczyć, co masz).
"-W " wymaga dodatkowego kodowania, aby wyjaśnić rubiemu, co masz na myśli, więc nie rozwiązuje to od razu rzeczy, ale jeśli już piszesz kod za pomocą-w, nie będziesz miał większych problemów z dodaniem niezbędnych bitów, aby uruchomić mały skrypt z ostrzeżeniami. W rzeczywistości, jeśli jesteś przyzwyczajony do używania-w, prawdopodobnie już piszesz kod w ten sposób i -w niczego nie zmieni, chyba że o czymś zapomnisz. Ruby wymaga o wiele mniej "kodu" niż większość (może wszystkie) skompilowanych języków, takich jak C++, więc rezygnacja z-w nie pozwala na zaoszczędzenie dużo pisania, po prostu pozwala mniej myśleć, zanim spróbujesz uruchomić skrypt (IMHO).
- v jest trybem verbose i nie zmienia działania skryptu (nie pojawiają się ostrzeżenia, nie zatrzymują skryptu w nowych miejscach). Kilka stron i dyskusji wywołuje-w tryb zwrotny, ale -w jest trybem ostrzegawczym i zmienia wykonanie skryptu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-19 06:12:54
Nazywa sięShebang . Mówi programowi ładującemu jakie polecenie użyć do wykonania pliku. Więc kiedy biegniesz ./myscript.rb
, to faktycznie przekłada się na /usr/local/bin/ruby -w ./myscript.rb
.
Windows używa skojarzeń plików do tego samego celu; linia shebang nie ma żadnego efektu (edit: zobacz odpowiedź FMc), ale nie powoduje żadnej szkody.
Przenośnym sposobem (działającym np. pod Cygwinem i RVM ) byłoby:
#!/usr/bin/env ruby
To użyje ENV aby dowiedzieć się, gdzie znajduje się Ruby interpreter jest i uruchom go.
Edit: najwyraźniej właśnie Cygwin źle się zachowuje z /usr/bin/env ruby -w
i próbuje szukać ruby -w
zamiast ruby
. Możesz chcieć umieścić efekt -w
w samym skrypcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-03 22:10:22
Chociaż zachowanie wykonania linii shebang nie przekłada się bezpośrednio na świat Windows, flagi zawarte w tej linii (na przykład -w
w twoim pytaniu) wpływają na uruchomiony skrypt Ruby.
Przykład 1 na komputerze z systemem Windows:
#!/usr/local/bin/ruby -w
puts $VERBOSE # true
Przykład 2 na komputerze z systemem Windows:
#!/usr/local/bin/ruby
puts $VERBOSE # false
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 22:25:00