Я действительно новичок в использовании терминала, и я слепо следовал руководству, не зная, почему он там и что он делает ... хотя эти руководства помогают мне в установке плеера vmware.
Это сработало для меня, так как я сделал файл исполняемым, щелкнул файл и запустил ... только сказал, что нужен root-доступ.
sudo sh vmwareplayer.txt
(переименован, чтобы быть короче)
Как-то я знаю, что делает sudo
, но что делает sh
? Без этого он идет "vmwareplayer.txt не найден". А для файлов комплекта почему он заканчивается на .txt?
sh обозначает «shell», а shell - старый интерпретатор командной строки, похожий на Unix. Интерпретатор - это программа, которая выполняет конкретные инструкции, написанные на языке программирования или сценариев. Итак, в основном вы говорите «Запустите этот файл для меня».
Вы должны понимать, что Linux на самом деле не смотрит на расширение файла, чтобы определить, что это за файл (или программа). Так что, пока содержимое этого файла написано так, как его понимает интерпретатор sh, оно будет работать. Но просто для удобства чтения такие файлы обычно имеют расширение .sh, и я не знаю, о чем думал разработчик, когда дал этому файлу расширение .txt.
Просто слово комментария:
sudo
выполняет команду с root
привилегиями. Когда вы вызываете sudo vmwareplayer.txt
, это явно означает «запустить команду vmwareplayer.txt с правами доступа root» и завершается неудачей, потому что такой программы нет.
sudo sh command
означает «выполнить sh command
с правами суперпользователя»
и sh command
выполнит команду в оболочке Bourne.
Между тем, помните, man
ваш лучший друг.
В Ubuntu sh
или /bin/sh
просто указывает на dash
. sh
должен запускать интерпретатор команд по умолчанию, который для Ubuntu равен dash
. 1 sup> dash
относится к оболочке Debian Almquist.
Оболочка является интерпретатором командной строки для системы. Есть несколько других оболочек, таких как bash
, csh
, zsh
и т. Д. Вот краткая выдержка из справочной страницы dash
:
blockquote> blockquote>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
- это интерпретатор командного языка / команда, которая выполняет команды, считанные из строки командной строки, стандартного ввода или указанного файла. Приложение гарантирует, что команды, которые должны быть выполнены, выражены на языке, описанном в Shell Command Language.
Например:
Следующее выполняет команду оболочки из строки: sh -c "cat myfile.txt"
т.е. выполняет команду-- cat myfile.txt
Обратитесь к следующей ссылке для более подробного объяснения. : http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
Я полагаю, что ни один из более ранних респондентов не ответил на вопрос, который вы на самом деле задали Г., поэтому я сделаю снимок. Вставка sh
при выполнении программы, как вы упомянули, выполняет программу в неинтерактивной подоболочке. Неинтерактивные оболочки ведут себя иначе (например, инициализация ) по сравнению со стандартной интерактивной оболочкой, которую вы использовали при запуске программы.
Честно говоря, я не знаю, какой практический эффект это имеет. Как вы заметили, sh vmwareplayer.txt
(обычно) может выполнять что-то в одной и той же папке, тогда как простой ввод vmwareplayer.txt
(обычно) не позволяет. Это должно сделать оболочку окружения; это не какое-то качество, присущее оболочке или подоболочке. Конечно, вы можете напрямую запустить программу в текущем каталоге как root: sudo ./vmwareplayer.txt
. По моему опыту, это всегда работает так же хорошо, как и sudo sh vmwareplayer.txt
. Я надеялся, что кто-нибудь придет и объяснит, почему подоболочка иногда бывает желательна.