Відповіді:
Ваш термінал запускає оболонку (швидше за все 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
навіть не видно внутрішнього сценарію.
Загалом, відповідь була б "ні", команди в оболонці однакові у сценаріях, у синтаксисі та семантиці.
Але є купа невеликих нюансів, пов’язаних із конфігурацією середовища (які змінні використовуються та з тим, що вони встановлені).
інтерактивна оболонка вибору для Linux є баш, але скриптова часто використовує інші інтерпретатори ( sh
, який є попередником bash
, ksh
, який знаходиться на одному рівні з баш), так що ви повинні взяти до уваги те , що оболонка використовується (ім'я поточної оболонки сек традиційно проводиться зі змінною SHELL
, спробуйте ввести echo $SHELL
).
можуть бути відмінності в конфігурації одного і того ж інтерпретатора для інтерактивного сеансу та для виконання сценарію.
Ні. Сценарій - це список команд, які можна ввести в термінал.
Ви можете вставити сукупність скрипту в термінал, і результат буде таким самим, як його запуск.
І навпаки, ви можете "зберегти" свої термінальні команди всередині файлу і перетворити його в сценарій для багаторазового використання та поділитися ним з рідними та друзями.
source script_file
. який буде редагувати ENV vars в поточному контексті. при виконанні сценарію, оскільки ./script_file
він не змінює ENV, якщо export
явно не використовується.
export
цьому сценарій не може змінювати будь-які змінні оболонки виклику. Те саме стосується таких речей, як PWD, визначених псевдонімів, функцій тощо. Їх можна змінити лише інтерактивно або шляхом пошуку файлу. Але так, це, мабуть, нічого, хтось спотикається в перший день. :)