Это случилось со мной, проблема заключалась в том, что systemd не был обновлен до версии, совместимой с конфигурацией mariadb.service. Я обновил systemd до 241 и все заработало.
Вы можете выполнитьb.csh
из a.sh
, точно так же, как вы можете выполнить любую программу, например grep
или cat
.
Вы не можете ожидать, что выполнение b.csh
добавит какие-либо переменные в среду работающей оболочкиa.sh
--b.csh будет выполняться в дочернем процессе, а дочернему процессу не разрешено изменять среду родительского процесса (это базовая безопасность ).
Если вам нужно передать данные из b.csh
, то b.csh должен распечатать эти данные, а a.sh может захватить их с помощью подстановки команд :data=$(b.csh)
--, хотя вам, вероятно, придется удалите опцию -x
из строки csh shebang, чтобы уменьшить шум.
Если написать
./script.sh
Вы сообщаете своей оболочке, что она должна запустить скрипт ./script.sh
. Но оболочка не знает, как следует запускать ./script.sh
. Это скрипт bash
? Может быть, это csh
? Или, возможно, это двоичный файл ELF, например ls
? Или, может быть, скрипт python
. Чтобы узнать это, ОС будет смотреть на первые байты файла. Если он находит шебанг, это означает, что он должен обработать этот файл в программе, указанной в шебанге.
Итак, если первая строка вашего скрипта
#!/usr/bin/bash
...
Он будет обрабатывать файл в программе с именем bash
в каталоге /usr/bin
, эффективно выполняя bash./script.sh
.
Но если вы пишете sh./path/to/b.csh
, вы напрямую обрабатываете файл в программе с именем sh
. sh
проигнорирует первую строку, так как бывает, что он интерпретирует строки, начинающиеся с #
, как комментарии.
Итак, вам следует писать не sh./path/to/b.csh
, а ./path/to/b.csh
, если вы хотите, чтобы шебанг соблюдался.
Обратите внимание, что это создаст новый процесс для запуска скрипта. Если вы хотите запускать каждую строку в ./path/to/b.csh
, как если бы она была написана непосредственно в a.sh
, вам следует вместо этого сделатьsource./path/to/b.csh
(или ../path/to/b.csh
, чтобы быть переносимым ). Но он также будет игнорировать шебанг, и каждая строка будет оцениваться как команда sh
, а не как csh
.