我正在使用Big,我正在尝试编写一个脚本来运行一个包(这个包是XSPEC,一个来自NASA的光谱拟合包),然后在这个包中运行命令。我从XSPEC
开始打开包,然后我想运行data 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha
--我的问题是,如果我只将两行插入一个enter,那么第二行就不会运行,因为我假设第一行在退出包之前不会终止。每当XSPEC启动完成时,它就会打印XSPEC version: 12.11.1 Build Date/Time: Thu Jul 1 04:09:17 2021 XSPEC12>
(是在三行中打印的)。是否有一种方法,使if语句,将进入下一个步骤,一旦前面的行被打印?
发布于 2021-07-03 15:25:23
来自XSPEC文档:
XSPEC是一个命令驱动的交互式程序.无论何时需要输入,您都会看到一个提示
XSPEC12>
。
这意味着,XSPEC程序并不打算以您正在尝试的方式执行。还请注意该段的其余部分:
命令收回和内联编辑可用箭头键。XSPEC使用Tcl作为用户界面,提供循环、条件、文件I/O等功能。有关Tcl语法的详细信息,请参阅附录A和其中的链接。
特别是XSPEC使用Tcl这一事实。Tcl本身就是一种脚本语言。文档中的措辞表明,您可以编写和使用Tcl脚本来指导/控制XSPEC程序及其操作,而不是尝试使用zsh
非交互地执行XSPEC。相反,编写一个Tcl脚本来加载数据集,进行处理,并输出结果。
您需要阅读XSPEC手册,以获得有关如何执行此操作的更多信息。手册还提供了关于如何学习/使用Tcl完成这项任务的链接和信息。
编辑添加:我刚才还想到,整个data ...
行是一个XSPEC命令(在Tcl中)。因此,它根本不是一个zsh
命令。所以,无论如何,你试图做这件事的方式是完全错误的。有几种方法可以将XSPEC data ...
命令加载/执行到XSPEC,包括外部脚本文件或shell重定向。同样,请阅读XSPEC文档,了解如何做到这一点。
发布于 2021-07-03 12:50:21
干净的方法是找出是否有任何方法知道这个XSPEC
,不管是什么,已经完成了加载。既然你还没有给我们任何关于那是什么的细节,恐怕我在这方面无能为力。
简单的方法是告诉脚本在后台启动第一个命令和启动下一个命令之间等待几秒钟。它的工具是sleep
,所以您需要这样的东西:
#!/bin/zsh
XSPEC &
## Now wait 5 seconds
sleep 5
## And continue
data 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha
wait # for XSPEC to finish
您可以使用sleep
时间来找到持续工作的最短值。
https://unix.stackexchange.com/questions/656820
复制相似问题