co robi dodawanie sh?

10

Jestem naprawdę nowy w korzystaniu z terminala i ślepo podążam za przewodnikiem, nie wiedząc, dlaczego on tam jest i co robi .. chociaż te przewodniki pomagają mi w instalacji odtwarzacza vmware.

ten działał dla mnie odkąd uczyniłem plik wykonywalnym, klikając plik i uruchamiając .. tylko powiedz, że potrzebny jest dostęp do konta root.

sudo sh vmwareplayer.txt (przemianowano go na krótszy)

Jakoś wiem, co sudorobi, ale co robi sh? Bez niego pojawia się komunikat „Nie znaleziono pliku vmwareplayer.txt”. A w przypadku plików pakietów, dlaczego kończy się na .txt?

Gabino Garcia
źródło
Jest to tłumacz ustny
Tachyons
@Tachyons Jeśli znasz odpowiedź na pytanie, wyjaśnij go bardziej szczegółowo i opublikuj jako odpowiedź! :)
Alvar
Zobacz także powiązane pytanie z odpowiedziami wyjaśniającymi dogłębnie na temat tłumaczy (takich jak sh, bash) i shebangs itp.
1
@Mik To nie jest duplikat tego pytania. To pytanie, co shrobi polecenie wywołujące skrypt. To pytanie dotyczy sposobu #!działania pliku skryptu . Zupełnie inaczej.
Eliah Kagan
@EliahKagan Tak, prawdopodobnie byłem zbyt pochopny, by zacytować to jako duplikat: powinienem był podać „spokrewnione, ale nie duplikowane”, odnosząc się do drugiej odpowiedzi. Masz rację jak zwykle; jeśli chcesz poprosić moderatora o ponowne otwarcie, w porządku. Już głosowałem, aby ponownie otworzyć.

Odpowiedzi:

16

sh oznacza „shell”, a shell to stary, uniksowy interpreter wiersza poleceń. Tłumacz to program, który wykonuje określone instrukcje napisane w języku programowania lub skryptowym. Mówisz więc „Wykonaj dla mnie ten plik”.

Musisz zrozumieć, że Linux tak naprawdę nie patrzy na rozszerzenie pliku w celu ustalenia, co to jest plik (lub program). Tak długo, jak treść tego pliku jest napisana w sposób zrozumiały dla interpretera sh, będzie działać. Ale tylko ze względu na czytelność, takie pliki mają zwykle rozszerzenie .sh i nie mam pojęcia, co programista myślał, gdy nadał temu plikowi rozszerzenie .txt.

Gladen
źródło
5

W Ubuntu shlub /bin/shpo prostu wskazuje dash. shma uruchamiać domyślny interpreter poleceń, który dotyczy dashUbuntu. 1 dash odnosi się do powłoki Debian Almquist.

Powłoka jest interpretatorem wiersza poleceń dla systemu. Istnieje kilka innych jak muszle bash, csh, zshitd. Oto krótki fragment stronę man dash:

 The shell is a command that reads lines from either a file or the termi‐
 nal, interprets them, and generally executes other commands.  It is the
 program that is running when a user logs into the system (although a user
 can select a different shell with the chsh(1) command).  The shell imple‐
 ments a language that has flow control constructs, a macro facility that
 provides a variety of features in addition to data storage, along with
 built in history and line editing capabilities.  It incorporates many
 features to aid interactive use and has the advantage that the interpre‐
 tative language is common to both interactive and non-interactive use
 (shell scripts).  That is, commands can be typed directly to the running
 shell or can be put into a file and the file can be executed directly by
 the shell.

Istnieje wiele samouczków na temat powłok Linuksa, możesz zacząć od tego artykułu z Wikipedii .

W przypadku pytania, jeśli piszesz sh file, dashwykonuje się fileza ciebie.

zapalać
źródło
To dobre wyjaśnienie, czym jest sh, ale nie to, co robi w powyższym pytaniu.
NilsB
Dodano więcej informacji, teraz powinno wystarczyć
zapal
1

Tylko słowo komentarza:

sudowykonuje polecenie z rootuprawnieniami. Gdy zadzwonisz, sudo vmwareplayer.txtco wyraźnie oznacza „uruchom polecenie vmwareplayer.txt z dostępem root” i kończy się niepowodzeniem, ponieważ nie ma takiego programu.

sudo sh commandoznacza „wykonaj sh commandz uprawnieniami administratora”

i sh commandwykona polecenie pod powłoką Bourne'a.

Powstaje nowe pytanie. Co to są muszle? To jest dłuższe pytanie i pewnie znajdziesz trochę informacji na wiki.

Tymczasem pamiętaj, że manto twój najlepszy przyjaciel.

Melon
źródło
1

Uważam, że żaden z wcześniejszych respondentów nie odpowiedział na pytanie, które faktycznie zadałeś G., więc spróbuję. Przeplatanie shpodczas wykonywania programu, jak wspomniałeś, wykonuje program w nieinteraktywnej podpowłoce. Nieinteraktywne powłoki zachowują się inaczej (np. Inicjalizacja ) od standardowej powłoki interaktywnej, której używałeś podczas uruchamiania programu.

Szczerze mówiąc nie wiem, jaki to ma praktyczny efekt. Jak zauważyłeś, sh vmwareplayer.txtjest (zwykle) w stanie wykonać coś w tym samym folderze, gdzie po prostu vmwareplayer.txt(zwykle) nie będzie. To musi zrobić środowisko powłoki; nie jest to żadna jakość natywna dla samej powłoki lub samej podpowłoki. Można oczywiście bezpośrednio wykonać program w bieżącym katalogu jako root: sudo ./vmwareplayer.txt. Z mojego doświadczenia wynika, że ​​zawsze działa tak samo dobrze sudo sh vmwareplayer.txt. Miałem nadzieję, że ktoś przyjdzie i wyjaśni, dlaczego podpowłoka była czasem pożądana.

Sól
źródło
0

shNarzędzie jest interpreter języka polecenia / polecenie, które wykonuje polecenia odczytu z ciągu wiersza poleceń, standardowego wejścia lub podanego pliku. Aplikacja zapewnia, że ​​polecenia do wykonania są wyrażone w języku opisanym w Shell Command Language.

Na przykład:

Następujące polecenie wykonuje polecenie powłoki z łańcucha: sh -c "cat myfile.txt" tj. Wykonuje poleceniecat myfile.txt

Szczegółowe wyjaśnienie znajduje się pod następującym linkiem: http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

shivani1494
źródło