如何通过bash脚本使用here字符串将字母传递给abaqus数据检查? 1.通过子进程启动 bash 命令2a使用不同的作业名称Job-1、Job-2运行不同的作业2b写入命令行

问题描述

这个问题是关于将输入传递给 bash 脚本中的命令。我正在 Ubuntu 18.04 上工作。我在文件夹中多次运行以下命令:

abaqus datacheck job=Job input=inputfile.inp user=umat.f

每次我这样做时都会问我是否要覆盖现有的作业文件 (y/n)?然后我输入 y 并按回车键。我能够使用以下调整和终端提示上的 here 字符串自动执行最后一步:

abaqus datacheck job=Job input=inputfile.inp user=umat.f <<< 'y'

但是当我将它作为更大的自动文件的一部分包含在 bash 脚本中时,它不起作用。这个使用 here doc 的命令在 bash 脚本中也不起作用:

abaqus datacheck job=Job input=inputfile.inp user=umat.f << EOF
y
EOF

什么起作用了:我将单个字符 y 放在名为 affirmative 的文本文件中,并将其作为此处的文档传递:

abaqus datacheck job=Job input=inputfile.inp user=umat.f << affirmative

当我尝试使用简单的 here doc 或 here 字符串时,有人能告诉我我在 bash 脚本中做错了什么吗?我不想在我的文件夹中只有一个字符的文本文件

解决方法

受 bash 脚本限制真的很重要吗?如果没有,您可以将此解决方案与 python 脚本结合使用:

1.通过子进程启动 bash 命令

import subprocess
my_cmd = 'abaqus job=Job-1 input=inputfile.inp user=umat.f'

proc = subprocess.Popen(
   my_cmd,cwd=my_working_dir,stdout='my_study.log',stderr='my_study.err',shell=True
)

2a。使用不同的作业名称(Job-1Job-2)运行不同的作业

并延迟删除旧的(例如,在“Job-3”开始时删除“Job-1”)

2b。写入命令行

通过在 stdin=subprocess.PIPE 调用中添加选项 subprocess.Popen 并在之后使用 proc.stdin.write("y") 命令

就我个人而言,我更喜欢第一个选项,因为它对我来说似乎更容易预测。