cosa fa l'aggiunta di sh?


10

Sono davvero nuovo nell'uso del terminale e ho seguito la guida alla cieca senza sapere perché è lì e cosa fa ... anche se questa guida mi aiuta a installare il lettore vmware.

questo ha funzionato per me da quando ho reso il file eseguibile, facendo clic sul file ed esegui ... dite solo che è necessario l'accesso root.

sudo sh vmwareplayer.txt (rinominato per essere più breve)

In qualche modo so cosa sudofa ma cosa fa sh? Senza di essa va "vmwareplayer.txt non trovato". E per i file bundle perché termina con .txt?


È un interprete di lingua
Tachyons

@Tachyons Se conosci la risposta alla domanda, spiegala in modo più dettagliato e pubblicala come risposta! :)
Alvar

Vedi anche una domanda correlata con risposte che spiegano in modo approfondito gli interpreti (come sh, bash) e shebangs, ecc.

1
@Mik Questo non è un duplicato di quella domanda. Questo è chiedere cosa shfa in un comando che invoca uno script. Questa domanda riguarda come #!funziona all'interno di un file di script . Totalmente differente.
Eliah Kagan,

@EliahKagan Sì, probabilmente ero troppo frettoloso per citarlo come duplicato: avrei dovuto mettere "correlato, ma non duplicare" quando mi riferivo all'altra risposta. Hai ragione come al solito; se vuoi chiedere a un moderatore di riaprire, va bene. Ho già votato per riaprire.

Risposte:


16

sh sta per "shell" e shell è il vecchio interprete da riga di comando di Unix. Un interprete è un programma che esegue istruzioni specifiche scritte in un linguaggio di programmazione o di scripting. Quindi in pratica dici "Esegui quel file per me".

Devi capire che Linux non guarda davvero l'estensione del file per determinare quale sia il file (o programma). Quindi, finché il contenuto di quel file è scritto in modo che l'interprete sh capisca, funzionerà. Ma solo per motivi di leggibilità, a questi file viene normalmente fornita un'estensione .sh e non ho idea di cosa stesse pensando lo sviluppatore quando ha dato a quel file un'estensione .txt ..


5

In Ubuntu, sho /bin/shsemplicemente punta a dash. shdovrebbe eseguire l'interprete dei comandi predefinito, che è dashper Ubuntu. 1 si dash riferisce alla shell Debian Almquist.

Una shell è un interprete della riga di comando per il sistema. Ci sono diverse altre shell come bash, csh, zshecc Ecco un breve estratto dalla pagina man di 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.

Esistono molti tutorial sulle shell di Linux, puoi iniziare con questo articolo di Wikipedia .

Venendo alla tua domanda, se scrivi sh file, dashviene eseguito fileper te.


E 'una buona spiegazione di cosa sia sh, ma non di ciò che fa nella specifica domanda sopra.
NilsB,

Aggiunte alcune ulteriori informazioni, ora dovrebbe essere sufficiente
accendi il

1

Solo una parola di commento:

sudoesegue un comando con rootprivilegi. Quando chiami sudo vmwareplayer.txtche significa chiaramente "esegui il comando vmwareplayer.txt con accesso root" e fallisce, perché non esiste un programma del genere.

sudo sh commandsignifica "esegui sh commandcon privilegi di root"

ed sh commandeseguirà un comando sotto la shell Bourne.

Si pone una nuova domanda. Cosa sono le conchiglie? Questa è una domanda più lunga e troverai alcune informazioni sul wiki, suppongo.

Nel frattempo, ricorda che manè il tuo migliore amico.


1

Credo che nessuno dei primi soccorritori abbia risposto alla domanda che in realtà hai posto a G., quindi ci proverò. Interponendo shquando si esegue un programma come indicato, si esegue il programma in una subshell non interattiva . Le shell non interattive si comportano in modo diverso (ad es. Inizializzazione ) dalla shell interattiva standard in uso durante l'esecuzione del programma.

Onestamente non so quale effetto pratico abbia. Come hai notato sh vmwareplayer.txtè (di solito) in grado di eseguire qualcosa nella stessa cartella, dove semplicemente digitando vmwareplayer.txt(di solito) non lo sarà. Questo deve fare l'ambiente di shell; non è di qualità nativa per la shell o la subshell stessa. Ovviamente si può eseguire direttamente un programma nella directory corrente come root: sudo ./vmwareplayer.txt. Nella mia esperienza questo funziona sempre altrettanto bene sudo sh vmwareplayer.txt. Speravo che qualcuno venisse e spiegasse perché a volte la subshell era desiderabile.


0

L' shutilità è un interprete del linguaggio di comando / un comando che esegue i comandi letti da una stringa della riga di comando, dallo standard input o da un file specificato. L'applicazione garantisce che i comandi da eseguire siano espressi nella lingua descritta in Shell Command Language.

Per esempio:

Quanto segue esegue un comando shell da una stringa: sh -c "cat myfile.txt" ie esegue il comando--cat myfile.txt

Fare riferimento al seguente link per una spiegazione approfondita: http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.