що робить додавання sh?


10

Я дійсно новачок у використанні терміналу, і я сліпо слідую за керівництвом, не знаючи, чому це там і що це робить. Хоча ці посібники допомагають мені в установці програвача vmware.

цей працював для мене, оскільки зробив файл виконуваним, клацнувши по файлу та запустіть. Скажімо, потрібен кореневий доступ.

sudo sh vmwareplayer.txt (перейменований на коротший)

Якось я знаю, що sudoробить, але що робить sh? Без нього йде "vmwareplayer.txt не знайдено". А для пакетних файлів чому він закінчується .txt?


Це перекладач мови
Tachyons

@Tachyons Якщо ви знаєте відповідь на питання, поясніть її детальніше та опублікуйте як відповідь! :)
Альвар

Дивіться також пов’язане питання з відповідями, що пояснюють дуже глибоко про перекладачів (таких як sh, bash) та

1
@Mik Це не дублікат цього питання. Це питання, що shробить команда, яка викликає сценарій. Це питання стосується того, як #!працює всередині файлу сценарію . Зовсім різні.
Ілля Каган

@EliahKagan Так, я, мабуть, занадто поспішав навести це як дублікат: я мав би поставити "пов'язане, але не дублікат", коли посилався на іншу відповідь. Ви праві як завжди; якщо ви хочете попросити модератора знову відкрити це добре. Я вже проголосував за повторне відкриття.

Відповіді:


16

sh означає "shell", а оболонка - це старий інтерпретатор командного рядка, подібний Unix. Інтерпретатор - це програма, яка виконує конкретні вказівки, написані мовою програмування або сценаріїв. Отже, ви в основному говорите "Виконати цей файл для мене".

Ви повинні розуміти, що Linux насправді не розглядає розширення файлу, щоб визначити, що таке файл (або програма). Так що, поки вміст цього файлу написаний так, як розуміє інтерпретатор, він буде працювати. Але просто заради читабельності таким файлам зазвичай надається розширення .sh, і я не маю поняття, що думав розробник, коли він дав цьому файлу розширення .txt.


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 з кореневим доступом", і не вдасться, оскільки такої програми немає.

sudo sh commandозначає "виконувати sh commandз root правами"

і sh commandвиконає команду під оболонкою Bourne.

Виникає нове питання. Що таке оболонки? Це довше питання, і ви, напевно, знайдете інформацію про вікі.

Тим часом, пам’ятай, manце твій найкращий друг.


1

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

Чесно кажучи, я не знаю, який практичний ефект це має. Як ви помітили sh vmwareplayer.txt, (як правило) вдається виконати щось у тій же папці, де просто вводити vmwareplayer.txt(як правило) не буде. Це має робити середовище оболонки; це не будь-яка якість, яка є власною оболонкою або самою оболонкою. Звичайно, ви можете безпосередньо виконати програму в поточному каталозі як root : sudo ./vmwareplayer.txt. На мій досвід, це завжди працює так само добре sudo sh vmwareplayer.txt. Я сподівався, що хтось підійде та пояснить, чому іноді бажаний цей пакет.


0

shУтиліта є команда інтерпретатора мови / команда , яка виконує команди читання з рядка командного рядка, стандартного введення або зазначеного файлу. Додаток гарантує, що команди, які потрібно виконати, виражаються мовою, описаною в командній мові Shell.

Наприклад:

Наступне виконує команду оболонки з рядка: sh -c "cat myfile.txt" тобто виконує команду--cat myfile.txt

Для поглибленого пояснення див. Посилання: http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.