Bash 避免在存储命令和函数输出的脚本上捕获输入

Bash 避免在存储命令和函数输出的脚本上捕获输入,bash,posix,Bash,Posix,我有一个脚本,它将命令、函数和其他脚本的输出存储在日志文件中 我希望避免捕获用户输入 负责将命令输出存储到日志文件的行如下: $command 2>&1 | tee/dev/tty | ruby-pe“打印时间.现在.strftime([%s]”)如果$stdin.tty?'>>“$tempfile” 如果该命令是一个函数或脚本,要求用户输入并输出这些数据,则该输入将存储在临时文件中。我希望避免这种情况,因为我不想捕获敏感的数据 我无法修改正在包装的命令和函数。您的命令只保存程序输出,而不保存

我有一个脚本,它将命令、函数和其他脚本的输出存储在日志文件中

我希望避免捕获用户输入

负责将命令输出存储到日志文件的行如下:

$command 2>&1 | tee/dev/tty | ruby-pe“打印时间.现在.strftime([%s]”)如果$stdin.tty?'>>“$tempfile”
如果该命令是一个函数或脚本,要求用户输入并输出这些数据,则该输入将存储在临时文件中。我希望避免这种情况,因为我不想捕获敏感的数据


我无法修改正在包装的命令和函数。

您的命令只保存程序输出,而不保存用户输入。您看到的问题是,该命令选择输出用户输入的任何内容,并将其合并到自己的输出中,然后明显地记录下来

这是没有好办法的。请修改您的命令

无论如何。这里有一个坏的,脆弱的,粗糙的方法:

tempfile=test.txt
command='read -ep Enter_some_input: '

$command 2>&1 | 
  tee /dev/tty | 
  python3 -c $'import os\nwhile s:=os.read(0, 1024):\n if len(s) > 3: os.write(1, s)' |
  ruby -pe 'print Time.now.strftime("[%s] ") if !$stdin.tty?' >> "$tempfile"

Python命令会删除所有3字节或更少的读取。这样做的目的是在用户输入
readline
或类似内容的最基本情况下,逐个字符地删除回显,同时希望不要删除太多有意的输出。

这对捕获用户输入到脚本中的内容没有任何作用。现在,如果脚本中有什么东西将输入打印出来,那么它当然会进入日志文件。例如,试试bash-c'echo“说点什么:”;read-u0变量;回应“你说:$var”;|tee/dev/tty>>tempfile并查看您得到的结果,或者如果您删除您所说的
回音…
以从日志中提取敏感输入,您将有某种方法从其他内容中识别它们。一般来说,这听起来是不可能做到的,因为您的命令只存储程序输出。问题是命令选择发出作为其自身输出的一部分键入的键。不执行此操作的命令不会有此问题(比较
command='read foo'
vs
command='read-e foo'
:只有后者会记录输入)。你能做的并不多,因为是命令本身将用户输入合并到自己的输出中。我编辑了这个问题,声称我正在拦截打印出来的输入。我并不是说这个命令是完美的,我只是在寻找一个替代的解决方案,除了拦截那些由stdin打印出来的字符外,它也是完美的。没有办法不脆弱。