我想通过使用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
我已经尝试过了,但是不起作用(第一步已停止)。
答案 0 :(得分:0)
脚本中的文本被解释为命令,而不是键盘输入。因此,将需要以某种方式使输入自动化。一种简单的方法是使用here字符串:
command <<< "1"
但这将只允许一个键。如果您需要多个输入,则最简单的方法是使用字符串文字和输入行之间的换行符,例如:
command <<< $'1\n103'
在某些情况下,这是行不通的,例如,如果正在发送输入的代码是由父级在子shell中运行的,则父级会自己获取输入。
对于更复杂的内容,您可以尝试expect。