需要帮助复制由另一个 shell 脚本在 shell 脚本中创建的临时文件的内容

需要帮助复制由另一个 shell 脚本在 shell 脚本中创建的临时文件的内容

我有一个 shell 脚本test.sh

在其中,我尝试执行另一个 shell 脚本abc.shabc.sh执行时,它会接受以下选项之一AbC如果我选择A然后按下enter,它会创建一个临时文件并打开它,如果我给它退出屏幕并删除临时文件。

但是当我调用时test.sh,它会调用abc.sh并打开临时文件。

我想将临时文件复制到由创建的主目录abc.shq按以便退出脚本并继续test.sh

约束是我不被允许修改abc.sh

abc.sh具有创建临时文件的逻辑,并且在完成时,即如果我按下键q并且它退出脚本并且也删除临时文件。

我被困在了这一点test.sh

echo a | /home/amy/abc.sh

有人能帮我解决这个问题吗?

这是我的屏幕的输出,它创建了一个临时文件

+++++++++++++++++++++++++++++++++++++++++++++++++++

S1012852TB00N020405000000wwww6800001PB084Kpb474F7ED028BE71024744F07FC1EEECA667E511581D7AF6AD84E08B0040665415D32CC5ECCC900641
**/tmp/xxyyzz.2578098**

有没有办法复制文件?也许可以用线程复制。

答案1

尝试这个,

ref_file=$(mktemp)
{
  echo a
  sleep 1
  find /tmp -maxdepth 1 -type f -newer $ref_file -exec cp "{}" ~ \; 2> >(grep -v 'Permission denied' >&2)
} | timeout 2 ./abc.sh
rm $ref_file

您说abc.sh在运行它的“区域”中会创建一个垃圾文件。
使用类似下面的方法删除它(放在 之前rm $ref_file)。

find . -maxdepth 1 -type f -newer $ref_file -rm

解释

  1. 创建参考文件
  2. 生成一个脚本序列或一个子 shell,abc.sh通过{或管道传输到(
  3. echoa、b 或 c
  4. 等待直到abc.sh创建临时文件
  5. 查找比参考文件更新的文件 /tmp并将其移动或复制到目标。
  6. }使用或关闭脚本序列/子shell)
  7. 管道到 abc.sh,用于在移动文件后timeout自动终止abc.sh
  8. 删除参考文件。

相关内容