Muszę utworzyć skrypt bash, aby utworzyć i zamontować dysk. Dwie proste komendy. Oba „działają” po wprowadzeniu w wierszu poleceń.
Skrypt jest tworzony i uruchamiany za każdym razem, gdy zwykły użytkownik się loguje, dlatego potrzebuję metody, aby ten skrypt był wykonywalny w tym czasie. Jak dotąd nie mogę tego uruchomić. Na przykład pierwsza część mkdir /vvv/gggg
nie jest kontynuowana, ponieważ skrypt nie jest wykonywalny (tak sądzę).
Mam nadzieję, że to ma sens. czy to możliwe? Będziemy wdzięczni za wszelkie przemyślenia na temat tego, jak to zrobić.
Aktualizacja :
Dziękuję za twoje odpowiedzi. Prawdopodobnie powinienem dodać dodatkowe informacje poza tym, że jestem nowy w Linuksie.
Używam aplikacji wirtualnego pulpitu open source o nazwie Ulteo. Ta aplikacja działa na Ubuntu i ma bardzo małe wsparcie - dlatego tu jestem. Zasadniczo uczę się przez ogień.
Aplikacja ma więc funkcję zarządzania skryptem logowania, w której mogę powiązać skrypt z użytkownikiem. Prosty skrypt systemu Windows z obsługą sieci działa doskonale. Jednak kiedy próbuję zastosować skrypt bash dla Linuksa, nic się nie dzieje.
Myślę, że ponieważ chmod +x
najpierw muszę wykonać skrypt przeciw skryptowi, aby skrypt był wykonywalny, dlatego się nie udało. Nawiasem mówiąc, Ulteo działa w więzieniu chroot. Utworzyłem skrypt, zapisałem go i nie mogłem go znaleźć. Szukałem zarówno w więzieniu chroot, jak i poza nim.
Podoba mi się podejście Dan08, aby początkowy skrypt odwoływał się do innego skryptu, który mogę znaleźć i zrobić ręcznie. Czy napotkałbym ten sam problem?
Czy te dodatkowe informacje wyjaśniają sytuację? Z góry dziękuję.
Zdjęcia w załączeniu.
! [Zaloguj się do konsoli zarządzania scipt] [1]
! [skrypty systemu Windows, które działają] [2]
! [prosty skrypt Linuksa, który nie działa] [3]
Niestety nie mogę jeszcze publikować zdjęć
źródło
ls -l scriptname
. Powinieneś także wyjaśnić, w jaki sposób dokładnie tworzony jest skrypt i dlaczego nie tworzysz go tylko raz i zostawiasz w spokoju. Wreszcie, normalny użytkownik nie powinien mieć dostępu do zapisu/var
i dlatego nie powinien mieć możliwości tworzenia tam katalogów.Odpowiedzi:
Musisz zrobić dwie rzeczy:
Odwołaj się do interpretera skryptu na początku skryptu:
Ustaw uprawnienia, aby był wykonywalny:
źródło
Zamiast umożliwiać wykonanie skryptu, możesz zastosować inne podejście i zmienić sposób jego wywoływania.
script.sh
wystarczy uruchomić skrypt wykonywalny.jednak
Możliwe jest uruchomienie skryptu niewytłumaczalnego, jeśli podasz program, aby go uruchomić.
Tak
/bin/bash script.sh
lubbash script.sh
lubpython script.py
wszystkie uruchomią skrypty niewykonywalne.Tak więc moją sugestią byłoby zmodyfikowanie sposobu wywoływania skryptu i określenie pliku binarnego używanego do jego uruchomienia.
źródło
os.execv(__file__, sys.argv)
nie działa i na pewno jest więcej takich sytuacji. Jeśli celem jest bezpieczeństwo, po prostu użyj go z katalogu root / sudo, zamiast tego zezwalaj użytkownikom na uruchamianie plików binarnych. Ponadto, jeśli celem jest bezpieczeństwo, nie chcesz, aby mogły uruchamiać skrypty, ponieważ i tak możesz zaszkodzić systemowi ... wykonywalny czy nie. Nie rozumiem więc, dlaczego tak ważne jest unikanie tworzenia plików wykonywalnych.Utwórz program w C, C ++ lub Python itp. I użyj polecenia systemowego, aby wykonać skrypt bash.
Na przykład program C wygląda następująco:
Aby uruchomić program podczas uruchamiania, dodaj go do listy programów startowych. Otwórz aplikacje startowe z deski rozdzielczej i dodaj skompilowany plik wykonywalny do listy, klikając przycisk Dodaj.
źródło
bash path/yourbashscript.sh
.bash path/yourbashscript.sh
bezpośrednio zamiast kompilować i uruchamiać ten program C?Możesz uczynić skrypt bash wykonywalnym, uruchamiając następujące polecenie w wierszu polecenia.
Następnie wykonanie go przy uruchamianiu można wykonać, dodając go do listy programów startowych, jak powiedział @akabhirav.
źródło
SHC to ogólny kompilator skryptów powłoki. Pobiera skrypt określony w wierszu poleceń i generuje kod źródłowy C. Wygenerowany kod źródłowy jest następnie kompilowany i łączony w celu uzyskania rozebranego pliku binarnego.
Skompilowany plik binarny nadal będzie zależał od powłoki określonej w pierwszym wierszu kodu powłoki (shebang:
#!/bin/sh
lub takiej), dlatego SHC nie tworzy całkowicie niezależnych plików binarnych.Sam SHC nie jest takim kompilatorem jak
cc
. Raczej koduje i szyfruje skrypt powłoki i generuje kod źródłowy C z dodatkową możliwością wygasania. Następnie używa kompilatora systemowego do kompilacji rozebranego pliku binarnego, który zachowuje się dokładnie tak jak oryginalny skrypt. Po uruchomieniu skompilowany plik binarny odszyfruje i wykona kod z-c
opcją powłoki .źródło
#!
ichmod +x
?