Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.



 Członek DUG
 Członek DUG
	



Witam!
Orientuje się ktoś w tym? Jest na przykład skrypt w bashu - no, ale wyrzucam z niego wszelkie "bashinizmy" i zmieniam shebang na !#/bin/sh - no właśnie i jeżeli pod !#/bin/sh skrypt działa to wymagane jest jeszcze jakieś działanie? Żeby było zgodnie ze sztuką musi działać pod wszystkimi możliwymi? - tzn, tcsh, zsh, ksh, csh ? Pod bashem zwykle bezproblemowo działa to co działa przez /bin/sh. Jak to z tym jest?
 
 
Offline

 wiecznie niewyspany
 wiecznie niewyspany
	

% ls -l /bin/sh lrwxrwxrwx 1 root root 4 mar 1 2012 /bin/sh -> dash
Tak w kwestii /bin/sh
Jak widać w Debianie /bin/sh to nie bash ani nawet sh. To dash. I potem w skryptach robi się problem gdy ma być przenośny. Ostatnio miałem taki problem z OSSEC IDS. Ich skrypt instalacyjny zaczynał się od shebanga #!/bin/sh przez co instalacja się wywalała, bo w dashu nie ma skróconej operacji testu w formie [ ] .
Offline




 Użytkownik
 Użytkownik
	




A czy POSIX to nie standard ogólny dla Linuksów / Uniksów, chodzi mi o rozmieszczenie katalogów, domyślne programy itd.?
Fervi
PS. W teorii Bash najpopularniejszy, ale możesz przetestować na różnych
Offline

 Użytkownik
 Użytkownik
	

fervi napisał(-a):
A czy POSIX to nie standard ogólny dla Linuksów / Uniksów, chodzi mi o rozmieszczenie katalogów, domyślne programy itd.?
Przed 1977, nie było problemu ze standaryzacją UNIX'a, po tym roku [na niwie zmiany prawa licencyjnego w US], kiedy AT&T umożliwiono sprzedaż licencji kodu źródłowego najpierw ośrodkom naukowym, a potem praktycznie każdemu zainteresowanemu, kogo było na to stać; problem takowy zaczął się pojawiać.
Od lat 80'tych masz rozwój wielu wersji UNIX'a, przez różnych developerów. Nawet Microsoft miał przygodę ze swoim XENIXEM; który był praktycznie kopią Systemu V --> problem w tym że XENIX miał za duże wymagania systemowe jak na ówczesne nowo wprowadzone komputery domowe IBM; takoż powstał klon systemu Digital Research CP/M, którego autorem był Tim Paterson, ów klon znamy do dzisiaj pod nazwą MS-DOS.
  
Wracając do UNIX'a. 
Prawie każdy 'nabywca' kodu miał swoją wizję rozwoju systemu; co spowodowało dość duży bałagan, odczuwalny zwłaszcza w II połowie lat 80'tych.
Wtedy też poczęto prace nad standaryzacją. 
W 1983 r. Amerykański Narodowy Instytut Standaryzacji tj. ANSI powołał komitet, którego zadaniem było sformułowanie nowoczesnej, wszechstronnej definicji języka C. Pod koniec 1989 r. zaczął obowiązywać nowy standard języka programowania C - ANSI Standard X.3159-1989. Zyskał on rangę międzynarodową jako standard ISO/IEC 9899:1990.
POSIX rozwijany przez organizację IEEE [Institute of Electrical and Electronics Engineers], odnosił się początkowo do standardu 1003.1-1988 tj. interfejsu systemu operacyjnego, IEEE z czasem rozwinął standardy, jak np. o 1003.2; który ma identyfikować standard dla powłok oraz programów wspomagających, a 1003.7 ma być standardem administrowania systemem etc.
Offline







 Podobno człowiek...;)
 Podobno człowiek...;)
	








Jak widać w Debianie /bin/sh to nie bash ani nawet sh. To dash. I potem w skryptach robi się problem gdy ma być przenośny. Ostatnio miałem taki problem z OSSEC IDS. Ich skrypt instalacyjny zaczynał się od shebanga #!/bin/sh przez co instalacja się wywalała, bo w dashu nie ma skróconej operacji testu w formie [ ] .
/bin/sh - to w Linuxie zawsze jest dowiązanie symboliczne do aktualnego interpretera  powłoki.
Z interpreterów powłoki najpopularniejsze, to bash i zsh, jest też dash, csh, tcsh  i kilka innych.
Przywiązania Debiana do powłoki Dash nie rozumiem specjalnie, osobiście używam Basha.
Pozdrawiam
;-)
Offline



 inż.
 inż.
	enether napisał(-a):
bo w dashu nie ma skróconej operacji testu w formie [ ] .
Możesz rozwinąć?
root@srv03:~# echo '[ -e /etc/passwd ]; echo $?' | dash 0 root@srv03:~# echo '[ -e /etc/passwd2 ]; echo $?' | dash 1 root@srv03:~#
Offline

 wiecznie niewyspany
 wiecznie niewyspany
	

milyges napisał(-a):
enether napisał(-a):
bo w dashu nie ma skróconej operacji testu w formie [ ] .
Możesz rozwinąć?
Kod:
root@srv03:~# echo '[ -e /etc/passwd ]; echo $?' | dash 0 root@srv03:~# echo '[ -e /etc/passwd2 ]; echo $?' | dash 1 root@srv03:~#
Ehm, my bad. Pamięc zawiodła. Dokładny komunikat błędu brzmiał:
./install.sh: 372: ./install.sh: [[: not found
Czyli chodziło o [[
Offline






 Admin łajza
 Admin łajza
	







[[ ]] nie jest POSIX-owe.
Autor install.sh spartolił i wrzucił bashyzm w skrypt /bin/sh. Nie ma w tym żadnej winy ani dasha, ani żadnej innej powłoki.
Offline

 wiecznie niewyspany
 wiecznie niewyspany
	

Nigdzie nie stwierdziłem że winny jest dash. Zwyczajnie wskazałem na to że sh to nie zawsze powłoka bourne'a a powłoka którą twórcy dystrybucji uznali za słuszną na to miejsce.
Offline

 Użytkownik
 Użytkownik
	


Jacekalex napisał(-a):
Z interpreterów powłoki najpopularniejsze, to bash i zsh, jest też dash, csh, tcsh i kilka innych.
Przywiązania Debiana do powłoki Dash nie rozumiem specjalnie, osobiście używam Basha.
Bash jest dość mułowaty i stąd dowiązanie /bin/sh→/bin/dash, ale jest przecież dalej domyślną powłoką interaktywną.
Offline







 Podobno człowiek...;)
 Podobno człowiek...;)
	








Mułowaty? Zależy na jakim sprzęcie, może w okolicach Debiana Etch i Ubuntu 6.10 i ówczesnego sprzętu to było aktualne, ja na C2D nie widzę żadnej różnicy między oboma interpreterami, natomiast Bash ma wbudowany silnik regex, czego o ile się nie mylę Dash nie posiada, i jest odporny na rozmaite bashyzmy, których pełno na necie, 
a i w systemie się zdarza, jak w sławnym błędzie Gentoo'wego OpenRC, który wołał o /bin/sh, choć skrypty były pisane w bashu,
 i w starszych wersjach trzeba było kombinować specjalną łatkę, żeby OpenRC wołał o basha a nie sh, jeśli ktoś miał np sh -> zsh.
Jeśli natomiast chodzi o szybkość większych i bardziej skomplikowanych skryptów, to i tak zazwyczaj staram się takowe robić w perlu, ze względu na brak ograniczeń, jakie posiadają typowe interpretery powłoki.
Perlizmy natomiast można spokojnie przenosić między wszystkimi Linuxami, BSD, i MacOS, nawet na Win$ można ich w jakimś stopniu używać.
To też jest pewna zaleta, której Bash czy Dash nie posiadają w takim stopniu.
Pozdrawiam
;-)
Ostatnio edytowany przez Jacekalex (2013-05-23 18:03:52)
Offline

 Użytkownik
 Użytkownik
	


Jacekalex napisał(-a):
Mułowaty? Zależy na jakim sprzęcie, może w okolicach Debiana Etch i Ubuntu 6.10 i ówczesnego sprzętu to było aktualne, ja na C2D nie widzę żadnej różnicy między oboma interpreterami, natomiast Bash ma wbudowany silnik regex, czego o ile się nie mylę Dash nie posiada, i jest odporny na rozmaite bashyzmy, których pełno na necie (...)
To raczej kwestia tego, że rozbudowane funkcje basha są zbędne powłoce nieinteraktywnej, natomiast negatywnie odbijają się na wydajności, a Debian z założenia ma działać na bardzo różnym sprzęcie. No i zawsze to dobra okazja do eliminacji bashyzmów. W przypadku Debiana odbyło się to głównie kosztem użytkowników Ubuntu, które pierwsze wprowadziło tę zmianę ;)
Offline



 Członek DUG
 Członek DUG
	



Dla mnie również domniemana mułowatość basha to jakiś absurd przy dzisiejszych komputerach. Na wirtualnym Wheezy w KVM, zainstalowałem sobie wszystkie te powłoki (bash, dash, zsh, ksh, tcsh, csh). O ile w przypadku pierwszych czterech rzeczywiście można pisać w miarę "uniwersalny" skrypt to te "tcsh" i "csh" to chyba jakieś stare nierozwijane dziadki,
 
 
Offline