【发布时间】:2021-11-02 16:57:09
【问题描述】:
我已经编写了我的第一个 bash 脚本,它可以挽救目前存储在大量 8 英寸软盘上的 6800 个历史性 mdos 文件。该脚本为可执行文件提供参数,该文件 [a] 列出磁盘映像上的文件,然后 [b] 逐个获取每个文件并将其保存到硬盘驱动器上的目录中。可执行文件是从source code written by Joseph H Allen 编译的。
C:/TEST/mdos.exe floppy.img ls -1 > filelist # list filenames one per line ;
while read -r name; do
echo -e "${name}"
C:/TEST/mdos.exe floppy.img get $name C:/TEST/MDOS/$name > loadstart # capture load & start addresses
done < filelist
我现在正试图通过捕获脚本运行时出现在屏幕上的两个交错的stdout 字符串来记录归档过程。这些字符串来自运行可执行文件的两个单独的行。
第一个列出了在磁盘映像上找到的所有文件名,以响应在运行时提供给mdos.exe 的ls 参数。每个文件名出现在连续的行中。
C:/TEST/mdos.exe floppy.img ls -1
第二个显示一些 mdos 6800 命令文件在运行时使用的加载和起始地址。
C:/TEST/mdos.exe floppy.img get $name C:/TEST/MDOS/$name
在屏幕上两个流是这样交错的
a.lo
Load=$2000, Start=$2000
a.sa
ad571.cm
Load=$6000, Start=$6000
sd571c.sa
b2716.cm
Load=$2000, Start=$2002
...
每当有加载地址起始地址消息时,如果它与报告它的文件出现在同一行,那么在打印的日志中会更有意义,就像这样
所需格式
a.lo Load=$2000, Start=$2000
a.sa
ad571.cm Load=$6000, Start=$6000
ad571c.sa
b2716.cm Load=$2000, Start=$2002
...
到目前为止,我已经设法将第一个 stdout 流保存到文件中,但没有保存第二个。
虽然我理解避免 ls 在帖子 here here 和 here 中出现的论点,但我的脚本中当前有效的部分使用 ls,这是 mdos.exe 所需的论点。不幸的是,它恰好拼写相同,并且在功能上类似于 Linux 中的ls。我真的不知道这是否导致了明显的问题:如何捕获加载和起始地址。最终,我需要捕获两个stdout 流并以所需的打印格式(上方)将它们呈现在同一行。查看帖子 here here here 和 here 似乎我应该使用关联数组来执行此操作,而不是编写两个单独的文件。
如果这是进行的最佳方式,如何将其作为单个循环来完成?还是应该使用单独的循环来捕获每个流?
【问题讨论】:
-
太棒了
echo -ne "${name} "?同样>覆盖每个循环的文件,使用>>追加到文件。 -
好点。这可以很好地隐藏问题。检查
-
好建议。
>>没有区别,但/n选项肯定会通过一些调整来解决这个问题。这是它给出的 a.loLoad=$2000, Start=$2000 a.saad571.cmLoad=$6000, Start=$6000 ad5713.cmLoad=$6000, Start=$6000 ad571c.sab2716.cmLoad=$2000, Start=$2002 如果你愿意发布答案我会接受它