¿Qué hace agregar sh?

10

Soy realmente nuevo en el uso de terminales y he estado siguiendo la guía a ciegas sin saber por qué está ahí y qué hace ... aunque estas guías me ayudan a instalar el reproductor vmware.

este funcionó para mí ya que hace que el archivo sea ejecutable, haga clic en el archivo y se ejecute ... solo diga que se necesita acceso root.

sudo sh vmwareplayer.txt (renombrado para ser más corto)

De alguna manera sé lo que sudohace pero ¿qué hace sh? Sin ella, aparece "vmwareplayer.txt no encontrado". Y para los archivos de paquete, ¿por qué termina con .txt?

Gabino García
fuente
Es un intérprete de idiomas
Tachyons
@Tachyons Si conoce la respuesta a la pregunta, explíquela con más detalle y publíquela como respuesta. :)
Alvar
Consulte también una pregunta relacionada con respuestas que explican en profundidad sobre intérpretes (como sh, bash) y shebangs, etc.
1
@Mik Esto no es un duplicado de esa pregunta. Esto es preguntar qué shhace en un comando que invoca un script. Esa pregunta es acerca de cómo #!funciona un dentro de un archivo de script . Totalmente diferente.
Eliah Kagan
@EliahKagan Sí, probablemente fui demasiado apresurado para citarlo como un duplicado: debería haber puesto 'relacionado, pero no duplicado' al referirme a la otra respuesta. Tienes razón como siempre; si quieres pedirle a un moderador que vuelva a abrir, está bien. Ya he votado para reabrir.

Respuestas:

15

sh significa "shell" y shell es el antiguo intérprete de línea de comandos similar a Unix. Un intérprete es un programa que ejecuta instrucciones específicas escritas en un lenguaje de programación o scripting. Entonces básicamente dices "Ejecuta ese archivo por mí".

Debe comprender que Linux realmente no mira la extensión del archivo para determinar cuál es el archivo (o programa). Por lo tanto, siempre que el contenido de ese archivo esté escrito de una manera que el intérprete sh comprenda, funcionará. Pero solo en aras de la legibilidad, estos archivos normalmente reciben una extensión .sh y no tengo idea de lo que el desarrollador estaba pensando cuando le dio a ese archivo una extensión .txt.

Gladen
fuente
5

En Ubuntu, sho /bin/shsimplemente apunta a dash. shse supone que ejecuta el intérprete de comandos predeterminado, que es dashpara Ubuntu. 1 se dash refiere al caparazón de Debian Almquist.

Un shell es un intérprete de línea de comando para el sistema. Hay varias otras conchas como bash, csh, zshetc. Aquí es un breve extracto de la página de hombre 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.

Hay muchos tutoriales sobre shells de Linux, puede comenzar con este artículo de Wikipedia .

Al escribir su pregunta, si escribe sh file, se dashejecuta filepor usted.

encender
fuente
Es una buena explicación de qué es sh, pero no de lo que hace en la pregunta específica anterior.
NilsB
Se agregó más información, debería ser suficiente ahora
encienda el
1

Solo una palabra de comentario:

sudoejecuta un comando con rootprivilegios. Cuando llama, lo sudo vmwareplayer.txtque claramente significa "ejecutar el comando vmwareplayer.txt con acceso de root" y falla, porque no existe dicho programa.

sudo sh commandsignifica "ejecutar sh commandcon privilegios de root"

y sh commandejecutará un comando bajo Bourne shell.

Surge una nueva pregunta. ¿Qué son las conchas? Esta es una pregunta más larga y encontrarás información en wiki, supongo.

Mientras tanto, recuerda que manes tu mejor amigo.

Melón
fuente
1

Creo que ninguno de los primeros en responder respondió la pregunta que realmente le hiciste a G., así que intentaré responder. La interposición de shcuando ejecuta un programa como usted mencionó, ejecuta el programa en una subshell no interactiva . Los shells no interactivos se comportan de manera diferente (por ejemplo, la inicialización ) del shell interactivo estándar que estaba utilizando cuando ejecutó el programa.

Honestamente, no sé qué efecto práctico tiene esto. Como notó, sh vmwareplayer.txtes (generalmente) capaz de ejecutar algo en la misma carpeta, donde simplemente escribir vmwareplayer.txt(generalmente) no lo hará. Eso tiene que ver con el entorno de shell; no es ninguna cualidad nativa del shell o subshell en sí. Por supuesto, puede ejecutar directamente un programa en el directorio actual como root: sudo ./vmwareplayer.txt. En mi experiencia, esto siempre funciona tan bien como sudo sh vmwareplayer.txt. Esperaba que alguien viniera y explicara por qué la subshell a veces era deseable.

sal
fuente
0

La shutilidad es un intérprete de lenguaje de comandos / un comando que ejecuta comandos leídos desde una cadena de línea de comando, la entrada estándar o un archivo especificado. La aplicación garantiza que los comandos que se ejecutarán se expresen en el idioma descrito en Shell Command Language.

Por ejemplo:

Lo siguiente ejecuta un comando de shell desde una cadena: sh -c "cat myfile.txt" es decir, ejecuta el comando--cat myfile.txt

Consulte el siguiente enlace para obtener una explicación detallada: http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

shivani1494
fuente