我有一个 shell 脚本test.sh
。
在其中,我尝试执行另一个 shell 脚本abc.sh
。abc.sh
执行时,它会接受以下选项之一A,b,C如果我选择A然后按下enter,它会创建一个临时文件并打开它,如果我给问它退出屏幕并删除临时文件。
但是当我调用时test.sh
,它会调用abc.sh
并打开临时文件。
我想将临时文件复制到由创建的主目录abc.sh
,q按以便退出脚本并继续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
解释:
- 创建参考文件
- 生成一个脚本序列或一个子 shell,
abc.sh
通过{
或管道传输到(
echo
a、b 或 c- 等待直到
abc.sh
创建临时文件 - 查找比参考文件更新的文件
/tmp
并将其移动或复制到目标。 }
使用或关闭脚本序列/子shell)
- 管道到 abc.sh,用于在移动文件后
timeout
自动终止abc.sh
- 删除参考文件。