Скорее всего, проблема связана с тем, что символ "!" является специальным символом во многих оболочках Unix/Linux, включая bash. Он используется для обращения к истории команд, поэтому может приводить к неожиданным результатам или ошибкам при введении команды.
Чтобы экранировать символ "!", используйте одинарные кавычки вокруг всей команды SQL или же обратный слеш перед "!". Однако, учитывая, что вы уже используете одинарные кавычки для задания пароля, вам нужно экранировать их внутри команды, Чтобы выполнить команду самим паролем в одинарных кавычках, можно использовать схему с вложенными кавычками разного типа или разбить команду на части. Пример:
```bash
sudo -u postgres psql -U postgres -c "alter user postgres with password 'A******e\!qA';"
```
Если ваш пароль содержит символы, которые нужно экранировать и они находятся внутри одинарных кавычек, то вы можете обернуть весь пароль в двойные кавычки и использовать обратный слеш для экранирования внутренних одинарных кавычек:
```bash
sudo -u postgres psql -U postgres -c "alter user postgres with password '\"A******e!qA\"';"
```
Убедитесь, что после экранирования команда правильно интерпретируется оболочкой перед выполнением в psql.
Также можно передать пароль через переменную среды или файл, чтобы избежать необходимости его экранирования в команде:
```bash
PASSWORD='A******e!qA'
sudo -u postgres psql -U postgres -c "alter user postgres with password '$PASSWORD';"
```
Убедитесь, что в этом случае переменная `PASSWORD` экспортируется, чтобы она могла быть доступной в субшелле, который запускается командой `sudo`.