Різниця між командами в bash script і командами в терміналі


Відповіді:


7

Ваш термінал запускає оболонку (швидше за все bash), яка запитує ваші команди та виконує їх.

Крім цього інтерактивного режиму, ви також можете використовувати свою оболонку для запуску команд з файлу. Для виконання команд у вашому файлі ви можете або зателефонувати до оболонки безпосередньо на зразок, bash scriptабо ви можете запустити файл із «shebang» #!/bin/bashта зробити його виконуваним ( chmod +x script). Тоді ви можете ставитися до сценарію як до бінарного файлу і виконувати його, наприклад, як ./scriptабо розміщувати його там, де ви шукаєте його. ( echo $PATH)

Швидше за все, як ваша інтерактивна оболонка, так і оболонка, яка використовується для запуску, є bash. З точки зору "linux learning first day" bash працює абсолютно однаково в обох режимах. - Набагато пізніше ви можете натрапити на незначні розбіжності. Якщо ви дійсно хочете дізнатись детально, я б запропонував прочитати man bashта пошукати місця, де згадуються "інтерактивні". (Ви можете шукати чоловічу сторінку, натиснувши /.)

Важливо відзначити, що сценарій запускається як новий процес. Це особливо означає, що змінні, встановлені в сценарії, не видно в оболонці виклику.

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

Без експорту aнавіть не видно внутрішнього сценарію.


1

Загалом, відповідь була б "ні", команди в оболонці однакові у сценаріях, у синтаксисі та семантиці.

Але є купа невеликих нюансів, пов’язаних із конфігурацією середовища (які змінні використовуються та з тим, що вони встановлені).

  • інтерактивна оболонка вибору для Linux є баш, але скриптова часто використовує інші інтерпретатори ( sh, який є попередником bash, ksh, який знаходиться на одному рівні з баш), так що ви повинні взяти до уваги те , що оболонка використовується (ім'я поточної оболонки сек традиційно проводиться зі змінною SHELL, спробуйте ввести echo $SHELL).

  • можуть бути відмінності в конфігурації одного і того ж інтерпретатора для інтерактивного сеансу та для виконання сценарію.


-1

Ні. Сценарій - це список команд, які можна ввести в термінал.

Ви можете вставити сукупність скрипту в термінал, і результат буде таким самим, як його запуск.

І навпаки, ви можете "зберегти" свої термінальні команди всередині файлу і перетворити його в сценарій для багаторазового використання та поділитися ним з рідними та друзями.


4
Ні. Вставка вмісту еквівалентна розміщенню сценарію. Це змінить всі види параметрів у поточній оболонці, які не було б змінено просто запуском сценарію.
michas

Ви праві. але що стосується його питань. Я думаю, що ми можемо сказати, що це досить схоже. але так, щоб перекласти те, що міхас сказав у noob'er термінах. вставлення вмісту сценарію рівнозначне виконанню source script_file. який буде редагувати ENV vars в поточному контексті. при виконанні сценарію, оскільки ./script_fileвін не змінює ENV, якщо exportявно не використовується.
Матьє Дж.

1
Ні. Навіть при exportцьому сценарій не може змінювати будь-які змінні оболонки виклику. Те саме стосується таких речей, як PWD, визначених псевдонімів, функцій тощо. Їх можна змінити лише інтерактивно або шляхом пошуку файлу. Але так, це, мабуть, нічого, хтось спотикається в перший день. :)
michas

1
@michas: Ну, все ж краще дати правильну характеристику. Якщо новачок амбітний і має трудові звички, він швидко підбереться. Якщо ми спробуємо розповісти дитині казку, ми просто натрапимо на ноги і зробимо незрозуміле враження - до того ж, початківець може повернутися, пізніше. Хоча я не вважаю себе новачком, є багато речей, яких я не знаю, і мені буде ображено, якби хто-небудь утримував що-небудь, відповідаючи на мої запитання, бо "ти там ще не молодший".
Емануель Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.