[yesh]$ env | grep password
password=hello
-> tsts является моим сценарием, который использует огибающий переменный пароль.
[yesh]$ grep password tsts
export DB_PWD="$password"
-> это - мой сценарий, работающий в режиме отладки
[yesh]$ sh -x tsts
+ export DB_DD=yesh
+ DB_DD=yesh
+ export DB_USER=user
+ DB_USER=user
+ export DB_PWD=hello
+ DB_PWD=hello
+ echo 'sqlplus '\''user/hello@yesh'\'''
sqlplus 'user/hello@yesh'
Что я могу сделать так, чтобы пароль не был отображен при запущении скрипта в режиме отладки??
Вам необходимо проверить и запомнить текущий параметр отладки, т. Е. Действует ли опция -x
при запуске сценария. Затем вам нужно окружить каждую инструкцию, которую вы не хотите печатать, с помощью set +x
, чтобы отключить опцию, и set -x
, чтобы включить ее, когда она была изначально установлена. Переменная $-
содержит параметры, которые действуют при запуске скрипта.
#!/usr/bin/env bash
export DB_DD=yesh
export DB_USER=user
# check and remember current setting of "-x":
if echo $- | grep -q x; then
is_debug=1
else
is_debug=0
fi
[ $is_debug -eq 1 ] && set +x # temporarily disable "-x"
export DB_PWD=hello # won't be printed
[ $is_debug -eq 1 ] && set -x # again enable "-x"
echo 'sqlplus '\''user/hello@yesh'\'''
exit 0;
Вывод sh -x tsts
:
+ export DB_DD=yesh
+ export DB_USER=user
+ echo x
+ grep -q x
+ is_debug=1
+ [ 1 -eq 1 ]
+ set +x
+ echo sqlplus 'user/hello@yesh'
sqlplus 'user/hello@yesh'
+ exit 0
Но имейте в виду, что это бессмысленно , потому что каждый, кто может запустить ваш скрипт, также может загляните в него и увидите там пароль.