что делает добавление sh?

10

Я действительно новичок в использовании терминала, и я слепо следовал руководству, не зная, почему он там и что он делает ... хотя эти руководства помогают мне в установке плеера vmware.

этот сработал для меня, так как я сделал исполняемый файл, щелкнул файл и запустил ... только сказал, что нужен root-доступ.

sudo sh vmwareplayer.txt (переименован, чтобы быть короче)

Почему-то я знаю, что sudoделает, но что делает sh? Без этого он идет "vmwareplayer.txt не найден". А для файлов комплекта почему он заканчивается .txt?

Габино Гарсия
источник
Это переводчик языка
Tachyons
@Tachyons Если вы знаете ответ на вопрос, объясните его более подробно и опубликуйте как ответ! :)
Alvar
См. Также связанный вопрос с ответами, подробно объясняющими вопросы о переводчиках (таких как sh, bash), шебангах и т. Д.
1
@Mik Это не дубликат этого вопроса. Это спрашивает, что shделает в команде, которая вызывает скрипт. Этот вопрос о том, как #!работает внутри файла сценария . Абсолютно другой.
Элия ​​Каган,
@EliahKagan Да, я, вероятно, был слишком поспешен, чтобы цитировать его как дубликат: я должен был поставить «связанный, но не дубликат» при ссылке на другой ответ. Вы правы как обычно; если вы хотите попросить модератора снова открыть это нормально. Я уже проголосовал за открытие.

Ответы:

16

sh обозначает «shell», а shell - старый интерпретатор командной строки, похожий на Unix. Интерпретатор - это программа, которая выполняет конкретные инструкции, написанные на языке программирования или сценариев. В общем, вы говорите: «Запустите этот файл для меня».

Вы должны понимать, что Linux на самом деле не смотрит на расширение файла, чтобы определить, что это за файл (или программа). Так что, пока содержимое этого файла написано так, как его понимает интерпретатор sh, оно будет работать. Но просто для удобства чтения такие файлы обычно имеют расширение .sh, и я понятия не имею, о чем думал разработчик, когда дал этому файлу расширение .txt.

Gladen
источник
5

В Ubuntu shили /bin/shпросто указывает на dash. shдолжен запускать интерпретатор команд по умолчанию, который предназначен dashдля Ubuntu. 1 dash относится к оболочке Debian Almquist.

Оболочка является интерпретатором командной строки для системы. Есть несколько других оболочек, таких как bash, cshи zshт. Д. Вот краткая выдержка из справочной страницы 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.

Есть много учебных пособий по оболочкам Linux, вы можете начать с этой статьи в Википедии .

Переходя к вашему вопросу, если вы пишете sh file, dashвыполняет fileдля вас.

воспламеняться
источник
Это хорошее объяснение, что такое sh, но не то, что он делает в конкретном вопросе выше.
NilsB
Добавлена ​​дополнительная информация, этого должно быть достаточно
зажечь
1

Просто слово комментария:

sudoвыполняет команду с rootпривилегиями. При вызове sudo vmwareplayer.txtэто явно означает «запустить команду vmwareplayer.txt с правами доступа root» и завершается ошибкой, потому что такой программы нет.

sudo sh commandозначает «выполнить sh commandс правами root»

и sh commandвыполнит команду под оболочкой Bourne.

Новый вопрос возникает. Что такое снаряды? Это более длинный вопрос, и я думаю, вы найдете некоторую информацию в вики.

Между тем, помни, manэто твой лучший друг.

Дыня
источник
1

Я полагаю, что ни один из более ранних респондентов не ответил на вопрос, который вы на самом деле задали Г., поэтому я попробую. Вставка shпри выполнении программы, как вы упоминали, выполняет программу в неинтерактивной подоболочке. Неинтерактивные оболочки ведут себя иначе (например, при инициализации ), чем стандартная интерактивная оболочка, которую вы использовали при запуске программы.

Честно говоря, я не знаю, какой практический эффект это имеет. Как вы заметили, sh vmwareplayer.txtон (как правило) может выполнить что-то в той же папке, где просто набрать vmwareplayer.txt(обычно) не удастся. Это должно сделать оболочку окружения; это не какое-то качество, присущее оболочке или подоболочке. Вы , конечно , можете непосредственно выполнить программу в текущем каталоге как корень: sudo ./vmwareplayer.txt. По моему опыту, это всегда работает так же хорошо, как sudo sh vmwareplayer.txt. Я надеялся, что кто-нибудь придет и объяснит, почему подоболочка иногда желательна.

Поваренная соль
источник
0

shУтилита является команда интерпретатора языка / команда , которая выполняет команды чтения из строки командной строки, стандартного ввода или указанного файла. Приложение обеспечивает, чтобы выполняемые команды были выражены на языке, описанном в Shell Command Language.

Например:

Следующее выполняет команду оболочки из строки: sh -c "cat myfile.txt" т.е. выполняет команду--cat myfile.txt

Обратитесь к следующей ссылке для более подробного объяснения: http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

shivani1494
источник