o que a adição de sh faz?

10

Eu sou realmente novo no uso do terminal e tenho seguido o guia cegamente, sem saber por que existe e o que ele faz .. embora esses guias me ajudem a instalar o vmware player.

este funcionou para mim desde que tornou o arquivo executável, clique no arquivo e execute ... apenas diga que o acesso root é necessário.

sudo sh vmwareplayer.txt (renomeou para ser mais curto)

De alguma forma eu sei o que sudofaz, mas o que shfaz? Sem ele aparece "vmwareplayer.txt não encontrado". E para arquivos em pacote, por que termina com .txt?

Gabino Garcia
fonte
É um intérprete de idiomas
Tachyons 03/03
@ Tachyons Se você souber a resposta para a pergunta, explique-a com mais detalhes e publique-a como resposta! :)
Alvar
Veja também uma relacionada questão com respostas que explicam em grande profundidade sobre intérpretes (como sh, o bash) e 'shebangs, etc.
1
@ Mik Esta não é uma duplicata dessa pergunta. Isso é perguntar o que shfaz em um comando que chama um script. Essa pergunta é sobre como #!funciona em um arquivo de script . Totalmente diferente.
Eliah Kagan 4/03
@EliahKagan Sim, eu provavelmente estava com muita pressa para citá-lo como duplicado: eu deveria ter colocado 'relacionado, mas não duplicado' ao me referir à outra resposta. Você está certo como sempre; se você quiser pedir a um moderador para reabrir, tudo bem. Eu já votei para reabrir.

Respostas:

15

sh significa "shell" e shell é o antigo interpretador de linha de comando do Unix. Um intérprete é um programa que executa instruções específicas escritas em uma linguagem de programação ou script. Então, basicamente, você diz "Execute esse arquivo para mim".

Você deve entender que o Linux realmente não analisa a extensão do arquivo para determinar qual é o arquivo (ou programa). Contanto que o conteúdo desse arquivo seja escrito de uma maneira que o intérprete sh entenda, ele funcionará. Mas, apenas por questões de legibilidade, esses arquivos normalmente recebem uma extensão .sh e não tenho idéia do que o desenvolvedor estava pensando quando atribuiu a ele uma extensão .txt.

Gladen
fonte
5

No Ubuntu, shou /bin/shapenas aponta para dash. shdeve executar o interpretador de comando padrão, que é dashpara o Ubuntu. 1 dash refere-se ao shell Debian Almquist.

Um shell é um intérprete de linha de comando para o sistema. Existem várias outras conchas como bash, csh, zshetc. Aqui está um breve trecho da página man de 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.

Existem muitos tutoriais sobre shells do Linux, você pode começar com este artigo da Wikipedia .

Chegando à sua pergunta, se você escrever sh file, dashexecuta filepara você.

acender
fonte
É uma boa explicação o que é sh, mas não o que faz na pergunta específica acima.
NilsB
Adicionadas mais informações, elas devem ser suficientes agora
acender
1

Apenas uma palavra de comentário:

sudoexecuta um comando com rootprivilégios. Quando você liga, o sudo vmwareplayer.txtque significa claramente "executar o comando vmwareplayer.txt com acesso root" e falha, porque não existe esse programa.

sudo sh commandsignifica "executar sh commandcom privilégios de root"

e sh commandexecutará um comando no shell Bourne.

Nova pergunta surge. O que são conchas? Essa é uma pergunta mais longa e você encontrará algumas informações no wiki, suponho.

Enquanto isso, lembre-se mané seu melhor amigo.

Melão
fonte
1

Acredito que nenhum dos respondentes anteriores respondeu à pergunta que você realmente fez a G., então vou tentar. A interposição de shquando um programa é executado, como você mencionou, executa o programa em um subshell não interativo . Os shells não interativos se comportam de maneira diferente (por exemplo, inicialização ) do shell interativo padrão que você estava usando quando executou o programa.

Honestamente, não sei que efeito prático isso tem. Como você notou, sh vmwareplayer.txté (geralmente) capaz de executar algo na mesma pasta, onde simplesmente digitar vmwareplayer.txt(geralmente) não será. Isso tem que fazer com o ambiente shell; não é nenhuma qualidade nativa do próprio shell ou subshell. Pode, claro, executar diretamente um programa no diretório atual como root: sudo ./vmwareplayer.txt. Na minha experiência, isso sempre funciona tão bem quanto sudo sh vmwareplayer.txt. Eu esperava que alguém aparecesse e explicasse por que o subshell às vezes era desejável.

Sal
fonte
0

O shutilitário é um intérprete da linguagem de comandos / um comando que executa comandos lidos a partir de uma cadeia de linhas de comandos, da entrada padrão ou de um arquivo especificado. O aplicativo garante que os comandos a serem executados sejam expressos no idioma descrito em Shell Command Language.

Por exemplo:

A seguir, um comando shell sh -c "cat myfile.txt" é executado a partir de uma string: ou seja, executa o command--cat myfile.txt

Consulte o seguinte link para obter uma explicação detalhada: http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

shivani1494
fonte