如何确保调用 shell 内置 echo 以便其在进程列表中不可见?

如何确保调用 shell 内置 echo 以便其在进程列表中不可见?

如果从命令行或 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 下。

相关内容