Можно отменить регулярное выражение, чтобы найти первый недопустимый символ
Текущий regex
$ str="in below script file I am checking if a given string has any invalid characters or not."
$ regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]+$'
$ [[ $str =~ $regex ]] && echo pass || echo fail
fail
Сбой на места. Свести на нет регекс: удалить якоря линии и конечный квантификатор +
; отрицаем выражение скобки - мы имеем набор из не действительных символов:
regex='[^]0-9a-zA-Z,!^`@{}=().;/~_|[-]'
Тогда
$ [[ $str =~ $regex ]] && echo "fail: found '${BASH_REMATCH[0]}'"
fail: found ' '
-121--155507- Попробуйте sudo-s
.
Это должно исправить.
Стандарт отсутствует; каждое приложение будет иметь свой собственный файл конфигурации, который может или не может поддерживать includes. Для приложений, которые не поддерживают включает, можно (cat headerstuff; cat somedir/foo *; cat footerstuff) > mainconfig
для создания файла конфигурации из номера люкс файлов или использования эквивалентной поддержки в программном обеспечении управления конфигурацией для сборки файла конфигурации.
Если вы хотите выйти из системы после успешного завершения /path/to/shell-script.sh
, используйте:
/path/to/shell-script.sh && logout
Более грубый способ сделать это — заставить скрипт убить родителя:
kill -HUP "$PPID"
(PPID — это переменная, которая устанавливается оболочкой bash для одного ).