如果从命令行或 shell 脚本执行以下行,这是否会在进程列表中可见
bash -c "echo $password"
或者
我只需要echo $password
在 bash 中的命令行或 bash shell 脚本中执行
我可以做任何测试来检查这种可见性吗?我只是在尝试这个,但我无法在列出的进程中看到它ps -ef | grep testscript
测试脚本:
i=0
while (( i < 100 ))
do
((i=i+1))
sleep 1
echo $$
echo hello
uname
done
答案1
只需强制它使用内置函数:
builtin echo foo
如果echo
不是内置的,这将失败。
答案2
内置函数的参数永远不会出现在任何ps
输出中,因为内置函数不是具有自己的命令行的单独程序。所有现代 shell(除了 BusyBox 的一些高度精简的配置),包括所有 bash 版本,都已echo
内置。
请注意,如果您正在调用bash -c "echo $password"
,那么密码将显示给所有人查看,因为它嵌入在您运行的命令中bash
。调用 shell 只是为了调用它的echo
命令是没有意义的,所以希望您没有这样做。
如果您需要将密码传递给不同的进程,可以将密码放入环境变量中。与命令行参数不同,环境变量不暴露给其他用户在 Linux 和大多数其他 unice 下。