我是Unix的新手......我有一个调用sqlplus的shell脚本。我有一些在代码中定义的变量。但是,我觉得在脚本中显示密码感觉不舒服。如果有人能告诉我如何隐藏密码,我将不胜感激。
谢谢
#This is test.sh It executes sqlplus
#!/bin/sh
export user=TestUser
export password=test
# Other variables have been ommited
echo ----------------------------------------
echo Starting ...
echo ----------------------------------------
echo
sqlplus $user/$password
echo
echo ----------------------------------------
echo finish ...
echo ----------------------------------------
答案 0 :(得分:0)
您可以将密码传递给sqlplus命令:
echo ${password} | sqlplus ${user}
答案 1 :(得分:0)
tl; dr:命令行上的密码容易暴露给恶意代码和用户。不要这样做。你有更好的选择。
可以使用$0
(命令本身)通过${!#}
访问命令行($#
是参数的数量,${!name}
取消引用{{1}的值},在这种情况下$name
)。
您可以简单地将密码作为位置参数(例如,首先或$#
)提供,或者使用getopts(1),但是参数数组中的密码是个坏主意。考虑$1
的情况(显示所有进程的完整命令行,包括其他用户的命令行)。
更喜欢以交互方式(stdin)或从配置文件获取密码。这些解决方案有不同的优点和缺点,因此请根据您的情况选择。如果你这样做,请确保未经授权的用户无法读取配置文件。它还不足以使文件很难找到顺便说一句。
可以使用shell内置命令ps auxww
来完成交互式事务。
bash(1)中 Shell内置命令部分中的描述包含
read
无声模式。如果输入来自终端,则不会回显字符。
-s
阅读bash手册,了解该代码段中使用的其他构造。
shell脚本的配置文件非常简单,只需在脚本中#!/usr/bin/env bash
INTERACTIVE=$([[ -t 0 ]] && echo yes)
if ! IFS= read -rs ${INTERACTIVE+-p 'Enter password: '} password; then
echo 'received ^D, quitting.'
exit 1
fi
echo password="'$password'"
。
有关source ~/.mystuffrc
的说明,请再次参阅 Shell Builtin命令。