在 Bash 中模拟 Gromacs 中的用户交互
Simulating User Interaction In Gromacs in Bash
我目前正在 GROMACS 4.6.5 中进行并行级联模拟,我正在使用 bash 脚本输入命令:
#!/bin/bash
pdb2gmx -f step_04_01.pdb -o step_04_01.gro -water none -ff amber99sb -ignh
grompp -f minim.mdp -c step_04_01.gro -p topol.top -o em.tpr
mdrun -v -deffnm em
grompp -f nvt.mdp -c em.gro -p topol.top -o nvt.tpr
mdrun -v -deffnm nvt
grompp -f md.mdp -c nvt.gro -t nvt.cpt -p topol.top -o step_04_01.tpr
mdrun -v -deffnm step_04_01
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
g_rms -s itasser_2znh.tpr -f step_04_01_pbc.xtc -o step_04_01_rmsd.xvg
trjconv
和 g_rms
等命令需要用户与 select 选项交互。例如当 运行 trjconv
你得到:
Select group for output
Group 0 ( System) has 6241 elements
Group 1 ( Protein) has 6241 elements
Group 2 ( Protein-H) has 3126 elements
Group 3 ( C-alpha) has 394 elements
Group 4 ( Backbone) has 1182 elements
Group 5 ( MainChain) has 1577 elements
Group 6 ( MainChain+Cb) has 1949 elements
Group 7 ( MainChain+H) has 1956 elements
Group 8 ( SideChain) has 4285 elements
Group 9 ( SideChain-H) has 1549 elements
Select a group:
并且用户应该输入例如。 0
进入终端selectGroup 0
。我试过使用 expect
和 send
,例如:
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
expect "Select group: "
send "0"
但是这不起作用。我也试过像 http://www.gromacs.org/Documentation/How-tos/Using_Commands_in_Scripts#Within_Script 那样使用 -flag
但它说它不是可识别的输入。
我的 expect
\ send
格式正确吗?在 GROMACS 中还有其他解决方法吗?
我不知道 gromacs,但我认为他们只是要求您使用 bash 语法:
yourcomand ... <<EOF
1st answer to a question
2nd answer to a question
EOF
所以你可能
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc <<EOF
0
EOF
您可以使用
echo 0 | trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
如果您需要多个输入,只需使用
echo 4 4 | g_rms -s itasser_2znh.tpr -f step_04_01_pbc.xtc -o step_04_01_rmsd.xvg
我目前正在 GROMACS 4.6.5 中进行并行级联模拟,我正在使用 bash 脚本输入命令:
#!/bin/bash
pdb2gmx -f step_04_01.pdb -o step_04_01.gro -water none -ff amber99sb -ignh
grompp -f minim.mdp -c step_04_01.gro -p topol.top -o em.tpr
mdrun -v -deffnm em
grompp -f nvt.mdp -c em.gro -p topol.top -o nvt.tpr
mdrun -v -deffnm nvt
grompp -f md.mdp -c nvt.gro -t nvt.cpt -p topol.top -o step_04_01.tpr
mdrun -v -deffnm step_04_01
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
g_rms -s itasser_2znh.tpr -f step_04_01_pbc.xtc -o step_04_01_rmsd.xvg
trjconv
和 g_rms
等命令需要用户与 select 选项交互。例如当 运行 trjconv
你得到:
Select group for output
Group 0 ( System) has 6241 elements
Group 1 ( Protein) has 6241 elements
Group 2 ( Protein-H) has 3126 elements
Group 3 ( C-alpha) has 394 elements
Group 4 ( Backbone) has 1182 elements
Group 5 ( MainChain) has 1577 elements
Group 6 ( MainChain+Cb) has 1949 elements
Group 7 ( MainChain+H) has 1956 elements
Group 8 ( SideChain) has 4285 elements
Group 9 ( SideChain-H) has 1549 elements
Select a group:
并且用户应该输入例如。 0
进入终端selectGroup 0
。我试过使用 expect
和 send
,例如:
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
expect "Select group: "
send "0"
但是这不起作用。我也试过像 http://www.gromacs.org/Documentation/How-tos/Using_Commands_in_Scripts#Within_Script 那样使用 -flag
但它说它不是可识别的输入。
我的 expect
\ send
格式正确吗?在 GROMACS 中还有其他解决方法吗?
我不知道 gromacs,但我认为他们只是要求您使用 bash 语法:
yourcomand ... <<EOF
1st answer to a question
2nd answer to a question
EOF
所以你可能
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc <<EOF
0
EOF
您可以使用
echo 0 | trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
如果您需要多个输入,只需使用
echo 4 4 | g_rms -s itasser_2znh.tpr -f step_04_01_pbc.xtc -o step_04_01_rmsd.xvg