Команда source
Модератор: Bizdelnick
Команда source
добрый день! Не могу понять как эта команда работает?
То есть она как то со скриптом связанна.
Можете привести примеры выполнения этой команды.
Заранее благодарен.
То есть она как то со скриптом связанна.
Можете привести примеры выполнения этой команды.
Заранее благодарен.
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
-
- Сообщения: 952
- Статус: дилетант широкого профиля
- ОС: Gentoo arm64 musl hardened
- Контактная информация:
Re: Команда source
Вы если запустите из скрипта другой скрипт, то это породит ещё один процесс, который и будет обрабатывать новый файл.
и
выполнят содержимое в рамках текущего процесса. Отличный вариант для инклуда частей скрипта по ситуации...
Код: Выделить всё
source путь_до_файла
Код: Выделить всё
. путь_до_файла
С уважением,
Павел Алиев
Павел Алиев
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Команда source
Неплохо бы уточнить, идёт ли речь о встроенной команде bash или о какой-то другой.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
Re: Команда source
Добрый день! Уважаемый,а что есть варианты?Bizdelnick писал: ↑24.01.2020 19:59Неплохо бы уточнить, идёт ли речь о встроенной команде bash или о какой-то другой.
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
Re: Команда source
Добрый день! Уважаемый не понял что значит инклуда?Aliech писал: ↑24.01.2020 19:41Вы если запустите из скрипта другой скрипт, то это породит ещё один процесс, который и будет обрабатывать новый файл.
иКод: Выделить всё
source путь_до_файла
выполнят содержимое в рамках текущего процесса. Отличный вариант для инклуда частей скрипта по ситуации...Код: Выделить всё
. путь_до_файла
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
Re: Команда source
Он имел в виду, что выполняется аналогия как в си директива #include, которая вставляет текст из файла на месте объявления этой директивы. Только тут существует разница. Команда source просто выполняет команды в текущем процессе bash, при этом не требуются права на выполнение файла в котором прописаны команды, в принципе можно представить что команда source просто подставляет на место ее объявления текст из файла.
пример
файл test1:
Spoiler
Код: Выделить всё
#!/bin/bash
A=10
source test2.sh
echo "B=$B"
Spoiler
Код: Выделить всё
echo "A=$A"
B=20
Последний раз редактировалось ormorph 06.02.2020 20:11, всего редактировалось 1 раз.
Re: Команда source
добрый день! Что то я не пойму 1.sh
1. Строка?
2. Строка переменной А присваивается значение 10
3. Строка что делает?
4. Строка как она выведет если ничего нет в переменной В?
1. Строка?
2. Строка переменной А присваивается значение 10
3. Строка что делает?
4. Строка как она выведет если ничего нет в переменной В?
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Команда source
Скрипт можно запускать разными способами.
Можно явно указать интерпретатор:
sh test1.sh или bash test1.sh
А можно файлу скрипта дать права на исполнение и запускать его как ./test1.sh
Вот запись в первой строке нужна как раз на этот случай: она определяет каким интерпретатором обрабатываются строки при "непосредственном" запуске. Такая практика применяется не только для bash-скриптов, но и скриптов на других языках, например, perl, python, sed.
Да.
"Подгружает" содержимое скрипта test2.sh для дальнейшего выполнения.
Переменная B определяется в test2.sh, который "подгружается" на предыдущем шаге.
Re: Команда source
добрый день! Что то вы меня запутали уважаемые?
Код: Выделить всё
/home/ildar
ildar@ROBOT-1:~$ mkdir test
ildar@ROBOT-1:~$ cd test/
ildar@ROBOT-1:~/test$ ls
ildar@ROBOT-1:~/test$ nano test1.sh
ildar@ROBOT-1:~/test$ nano test2.sh
ildar@ROBOT-1:~/test$ cat test1.sh
#!/bin/bash
A=10
source test2.sh
echo "B=$B
ildar@ROBOT-1:~/test$ cat test2.sh
echo "A=$A"
B=20
ildar@ROBOT-1:~/test$ chmod +x test1.sh
ildar@ROBOT-1:~/test$ chmod +x test2.sh
ildar@ROBOT-1:~/test$ ./test1
bash: ./test1: Нет такого файла или каталога
ildar@ROBOT-1:~/test$ ./test1.sh
A=10
./test1.sh: строка 5: неожиданный конец файла во время поиска «"»
./test1.sh: строка 6: синтаксическая ошибка: неожиданный конец файла
ildar@ROBOT-1:~/test$
Добавлено (20:06):
зачем во втором скрипте переменная B?Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
Re: Команда source
добрый день! Получается как бы скрипт номер 2 выполняется в 1 скрипте что ли так?
Код: Выделить всё
ildar@ROBOT-1:~/test$ ./test1.sh
A=10
B=20
ildar@ROBOT-1:~/test$ cat test1.sh
#!/bin/bash
A=10
source test2.sh
echo "B=$B"
ildar@ROBOT-1:~/test$ cat test2.sh
echo "A=$A"
B=20
ildar@ROBOT-1:~/test$
Добавлено (20:58):
Добрый день! А что будет делать команда если просто в терминале писать source?Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
Re: Команда source
А если пример какой-нибудь со скриптом где сначала source пишется?
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
Re: Команда source
В терминале не желательно выполнять скрипты командой source, так как переменное окружение скрипта в таком случае будет влиять на переменное окружение текущего процесса bash запущенного в терминале. Т.е. команда source по большей части нужна когда необходимо использовать переменное окружение из другого файла.
Re: Команда source
Что значит переменное окружение?
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit
Re: Команда source
Каждый раз когда запускается терминал, в нем запускается процесс интерпретатора bash, по крайней мере в большинстве дистрибутивов linux именно этот интерпретатор используется по умолчанию. Этот процесс использует уже зарезервированные переменные, просмотреть их содержимое можно выполнив команду env, вот они и называются текущим переменным окружением данного процесса bash. Так вот если задать в скрипте переменные(глобальные) с такими же именами что и в текущем окружении и выполнить скрипт командой source, это приведет к тому что содержимое переменных в текущем процессе bash поменяется, чего не происходит если выполнить скрипт командой ./script.sh.
Хотя если в скрипте первой строкой не указан интерпретатор с помощью которого он запускается:
Код: Выделить всё
#!/bin/bash
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Команда source
Это ничего не значит. Правильно — википедия://переменные окружения. И здесь речь идёт вовсе не о них, а об обычных переменных bash. Команда source к окружению никакого отношения не имеет.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Команда source
Добрый день! Насколько я понял какие то данные хранятся то есть переменные то есть допустим моя домашняя дериктория?
Код: Выделить всё
ildar@ROBOT-1:~$ env
SHELL=/bin/bash
SESSION_MANAGER=local/ROBOT-1:@/tmp/.ICE-unix/1808,unix/ROBOT-1:/tmp/.ICE-unix/1808
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GTK_IM_MODULE=ibus
QT4_IM_MODULE=ibus
GNOME_SHELL_SESSION_MODE=ubuntu
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
XMODIFIERS=@im=ibus
DESKTOP_SESSION=ubuntu
SSH_AGENT_PID=1727
GTK_MODULES=gail:atk-bridge
PWD=/home/ildar
LOGNAME=ildar
XDG_SESSION_DESKTOP=ubuntu
XDG_SESSION_TYPE=x11
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
XAUTHORITY=/run/user/1000/gdm/Xauthority
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
WINDOWPATH=2
HOME=/home/ildar
USERNAME=ildar
IM_CONFIG_PHASE=1
LANG=ru_RU.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_CURRENT_DESKTOP=ubuntu:GNOME
VTE_VERSION=5802
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/a2c3ad3d_ca1f_4338_aafe_805aef712b93
INVOCATION_ID=105dd47c23ca48e8b81ad8e2fc513bb9
MANAGERPID=1614
CLUTTER_IM_MODULE=ibus
GJS_DEBUG_OUTPUT=stderr
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /usr/bin/lesspipe %s
LIBVIRT_DEFAULT_URI=qemu:///system
USER=ildar
GNOME_TERMINAL_SERVICE=:1.87
DISPLAY=:0
SHLVL=1
QT_IM_MODULE=ibus
XDG_RUNTIME_DIR=/run/user/1000
JOURNAL_STREAM=9:35694
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
GDMSESSION=ubuntu
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
_=/usr/bin/env
ildar@ROBOT-1:~$
Учиться и еще раз учиться!
https://vk.com/orenburgit
https://vk.com/orenburgit