如何使用Shell脚本调用程序?

时间:2020-09-05 08:49:09

标签: shell

我想通过使用Shell脚本执行VASPKIT程序。

在终端中,我可以通过键入“ vaspkit”来调用该程序

===================== Structural Options ========================
 1)  VASP Input Files Generator    2)  Elastic-Properties
 3)  K-Path Generator              4)  Structure Editor
 5)  Catalysis-ElectroChemi Kit    6)  Symmetry Search

 ===================== Electronic Options ========================
 11) Density-of-States             21) DFT Band-Structure
 23) 3D Band-Structure             25) Hybrid-DFT Band-Structure
 26) Fermi-Surface                 28) Band-Structure Unfolding

 =========== Charge & Potential & Wavefunction Options ===========
 31) Charge & Spin Density         42) Potential-Related
 51) Wave-Function Analysis
 ====================== Misc Utilities ===========================
 71) Optical-Properties            72) Molecular-Dynamics Kit
 73) VASP2BoltzTraP Interface      74) USER interface
 91) Semiconductor Calculator      92) 2D-Materials Kit

 0)  Quit
 ------------>>

通常,我会选择'1'

1
 ==================== VASP Input Files Options ===================
 101) Customize INCAR File
 102) Generate KPOINTS File for SCF Calculation
 103) Generate POTCAR File with Default Setting
 104) Generate POTCAR File with User Specified Potential
 105) Generate POSCAR File from cif (no fractional occupations)
 106) Generate POSCAR File from Material Studio xsd (retain fixes)
 107) Reformat POSCAR File in Specified Order of Elements
 108) Successive Procedure to Generate VASP Files and Check
 109) Check All VASP Files

 0)   Quit
 9)   Back
 ------------>>

然后输入'103'以生成所需的文件。

如何在shell脚本中实现这一目标?我认为应该是这样的:

#!/bin/sh

for i in *; do cd $i;vaspkit;1;103;cd -;done

我已经尝试过了,但是不起作用(第一步已停止)。

1 个答案:

答案 0 :(得分:0)

脚本中的文本被解释为命令,而不是键盘输入。因此,将需要以某种方式使输入自动化。一种简单的方法是使用here字符串:

command <<< "1"

但这将只允许一个键。如果您需要多个输入,则最简单的方法是使用字符串文字和输入行之间的换行符,例如:

command <<< $'1\n103'

在某些情况下,这是行不通的,例如,如果正在发送输入的代码是由父级在子shell中运行的,则父级会自己获取输入。

对于更复杂的内容,您可以尝试expect

相关问题