私はBig Surを使用しており、パッケージ(パッケージはNASAのスペクトラムフィットパッケージであるXSPEC)を実行してから、そのパッケージのコマンドを実行するスクリプトを作成しようとしています。まず、XSPEC
パッケージを開いてから問題を実行したいと思います。 Enterキーdata 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha
を使用して2行を分割すると、パッケージが終了するまで最初の行が実行されないと想定されるため、2行目は実行されません。XSPEC version: 12.11.1 Build Date/Time: Thu Jul 1 04:09:17 2021 XSPEC12>
XSPECの起動が完了するたびに印刷されます(3つの別々の行に印刷されます)。前の行が印刷されたら、次のステップに進むifステートメントを作成する方法はありますか?
答え1
~からXSPEC文書:
XSPECはコマンドベースの対話型プログラムです。
XSPEC12>
入力が必要なときはいつでもプロンプトが表示されます。
これは、XSPECプログラムがユーザーが試みる方法で実行されることを意図していないことを意味します。また、段落の残りの部分を参照してください。
矢印キーを使用してコマンドとインライン編集を呼び出します。 XSPECはTclをユーザーインターフェースとして使用し、ループ、条件、ファイルI / Oなどを提供します。 Tcl構文の詳細については、付録Aとそのリンクを参照してください。
特にXSPECはTclを使用します。 Tcl自体はスクリプト言語です。文書のフレーズは、zsh
XSPECを非対話式に実行しようとする代わりに、Tclスクリプトを作成して使用して、XSPECプログラムとその操作を指示/制御できることを示唆しています。代わりに、データセットをロードして処理した後に結果を印刷するTclスクリプトを作成してください。
これを行う方法の詳細については、XSPECのマニュアルをお読みください。マニュアルはまた、このタスクを実行するためにTclを学び、使用する方法に関するリンクと情報を提供します。
追加するように編集されました:私も今行data ...
全体を考えています。はいXSPECコマンド(Tcl)。したがって、いいえzsh
それは単なる命令です。とにかく、あなたがこれをしようとする方法は完全に間違っています。data ...
外部スクリプトファイルやシェルリダイレクトなど、さまざまな方法でXSPECコマンドをXSPECにロード/実行できます。これを行う方法については、XSPECのドキュメントをもう一度お読みください。
答え2
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
常に動作する最も短い値を見つけるために時間を費やすことができます。
答え3
次のコマンドを使用して、対話型端末アプリケーションへの入力を自動化できます。予想されるMacOS用のスクリプトは、以下からインストールできます。自分で作った。
あなたはこのようなことをしたいでしょう
#!/usr/bin/expect -f
set timeout -1
spawn XSPEC
expect "XSPEC12>"
send -- "data 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha"
# Some expectation which can detect the completion of the previous step
# Further Commands