hist
команда является оболочкой Korn (ksh93) встроенный, и не доступна в ударе.
Ваш сценарий (сценарии), кажется, работает под ударом, не ksh.
ksh$ command -V hist
hist is a shell builtin
bash$ command -V hist
bash: command: hist: not found
Попробуйте следующее:
$ ksh myScript -s test -u test2
или:
$ SHELL=ksh ksh myScript -s test -u test2
Однако hist
команда, это обычно используется только в интерактивном режиме, и я не ожидал бы это в сценарии. Это редко вызывается непосредственно, и чаще как один из следующих псевдонимов:
$ alias | grep hist
fc=hist
history='hist -l'
r='hist -s'
Ищите любой из fc
, history
, r
.
Есть два способа сделать то же самое.
Подход 1:
Добавьте файл .pgpass
в домашний каталог пользователя (пользователя, который запускает скрипт):
$ cat /home/user/.pgpass
hostname:port:database:user:password
$ chmod 600 /home/user/.pgpass
После добавления вышеуказанного вам не нужно добавлять пароль ни в какие скрипт, который вы используете. Он будет подключаться напрямую.
Подход 2:
Добавьте следующее в сценарий оболочки. Но это раскроет ваш пароль и станет проблемой, если вы совершите фиксацию в каком-либо репозитории.
export PGPASSWORD=password
Если вы можете запустить psql от имени пользователя postgres, наиболее полезным решением является изменение pg_hba.conf, чтобы пользовательский postgres Unix, подключающийся через localhost / socket, аутентифицировался без какого-либо пароля для внешнего файла. В конце файла вставьте следующее:
local all postgres peer
Это значение TBMI по умолчанию. Возможно, кто-то подумал, что они были умными или более безопасными, когда удалили эту строку, идиот. Вы также можете использовать что-то вроде этого для службы мониторинга:
local zabbix zabbix peer
, для которой вы создаете имя пользователя и базу данных с именем «zabbix».