Это довольно странно.
Таким образом, я разработал эту названную вещь SahibLib
и это - в основном сценарий, который Вы получаете, это получает набор других сценариев.
Его дерево каталогов похоже на это:
/home
|- /home/myuser
|- /home/myuser/sahiblib
|- sahibload <- executed in ~/.bashrc
|- sahiblib <- executed by sahibload
|- modules
|- core.sls <- problem file
|- example.sls <- problem file
То, что SahibLib, как предполагается, делает, является источником .sls
файлы. Это не делает этого все же.
Это производит корректное сообщение (" [УСПЕХ] Спасибо и до свидания. "), но фактические файлы не получены.
myuser@mypc:~$ slhelp
Invalid command.
Странно, когда я получаю файл вручную, он работает:
myuser@mypc:~$ . ~/.bashrc
[SUCCESS] Thank you and goodbye.
myuser@mypc:~$ slhelp
SahibLib Core Help
...
Мой вопрос, почему сценарий правильно не выполняется в ~/.bashrc?
Обновление: Запись некоторых команд отладки к core.sls
, кажется, что файл выполняется отлично. Это добирается в конец файла и возвращает стандартный код выхода. Это делает проблему еще более странной, потому что теперь кажется, что Bash просто игнорирует функциональные определения напрямую. Кроме того, если необходимо видеть core.sls
, или любой из файлов, они доступны здесь
Из вашей ссылки , в нижней части этой страницы, я вижу эту строку:
echo "/home/myusername/sahiblib/sahibload" >> ~/.bashrc
Это указывает на то, что при запуске ~/.bashrc
будет выполнить sahibload
, , а не источник . Это означает, что любые функции, определенные в sahibload
, будут потеряны, когда выполнение sahibload
завершится и управление вернется к ~/.bashrc
.
Если вы хотите, чтобы функции, определенные в sahibload
, сохранялись, используйте:
echo ". /home/myusername/sahiblib/sahibload" >> ~/.bashrc
Давайте рассмотрим этот тестовый файл:
$ cat loader
#!/bin/sh
hello() { echo Hello; }
Перед при выполнении сценария не существует функции hello
:
$ hello
bash: hello: command not found
После того, как мы выполним сценарий, по-прежнему нет функции с именем hello
:
$ ./loader
$ hello
bash: hello: command not found
В приведенном выше примере loader
выполняется так же, как sahibload
выполняется в ~/.bashrc
.
Теперь давайте возьмем источник loader
и заметим, что определение hello
сохранилось:
$ . ./loader
$ hello
Hello
sahibload
необходимо получить, а не выполнить в ~/.bashrc
.