Влияют ли друг на друга несколько сценариев оболочки, использующих общий другой сценарий, когда они изменяют «исходную» переменную?

Модуль ядра, который считывает события, открывая определенные файлы вместо использования API ядра для получения событий, мягко говоря, довольно необычен.

Я бы решил эту проблему, используя ddили шестнадцатеричный редактор, чтобы исправить модуль ядра, чтобы вместо этого использовать некоторые другие пути, они создают эти пути как символические ссылки с udev.

0
07.10.2021, 04:24
1 ответ

Когда вы sourceсценарий оболочки -, это означает, что текущий экземпляр оболочки считывает строку сценария -за строкой -и выполняет команды на месте, как если бы вы ввели их на месте. команда -строка (, если вы выполняете вызов sourceиз подсказки )или как если бы вы скопировали -и -вставили их в сценарий (, если вы исходите из сценарий ).

Таким образом, различные сценарии оболочки file-1.shи file-2.shведут себя как имеющие локально определенную переменную оболочки, которая только случайно имеет одно и то же имя some_valueв обоих случаях. Даже если вы запустите два скрипта параллельно, они ничего не будут знать друг о друге, и поэтому между ними нет перекрестных -взаимодействий -оболочка под-, в которой работает file-1.sh, ничего не знает что оболочка sub -, в которой работает file-2.sh, также имеет определенную переменную some_value.


Кстати, ваша попытка создать арифметическое выражение в виде

some_value=$1+10

не будет иметь того эффекта, который вы можете себе представить. Для file-1.shбудет буквально 5+10, а для file-2.sh10+10буквально. Чтобы выполнить арифметическое вычисление, вы должны поместить его в арифметическое расширение, как в

some_value=$(($1+10))

Я бы рекомендовал проверять сценарии оболочки -с помощью shellcheck, также доступного как отдельный инструмент во многих дистрибутивах Linux, для обнаружения синтаксических (и некоторых логических )ошибок.

1
07.10.2021, 12:11

Теги

Похожие вопросы