как удостовериться, что огибающая переменная не будет отображена, когда запустил скрипт в режиме отладки

[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'

Что я могу сделать так, чтобы пароль не был отображен при запущении скрипта в режиме отладки??

1
задан 31 August 2018 в 21:16

1 ответ

Вам необходимо проверить и запомнить текущий параметр отладки, т. Е. Действует ли опция -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

Но имейте в виду, что это бессмысленно , потому что каждый, кто может запустить ваш скрипт, также может загляните в него и увидите там пароль.

2
ответ дан 7 December 2019 в 15:14

Другие вопросы по тегам:

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