![如何确保调用 shell 内置 echo 以便其在进程列表中不可见?](https://linux22.com/image/44714/%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E8%B0%83%E7%94%A8%20shell%20%E5%86%85%E7%BD%AE%20echo%20%E4%BB%A5%E4%BE%BF%E5%85%B6%E5%9C%A8%E8%BF%9B%E7%A8%8B%E5%88%97%E8%A1%A8%E4%B8%AD%E4%B8%8D%E5%8F%AF%E8%A7%81%EF%BC%9F.png)
如果从命令行或 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 下。