如何通过bash脚本使用这里的字符串传递一个字母到abaqus数据检查?



这个问题是关于在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文档的命令在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

有人能告诉我做错了什么在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
)

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

和删除旧的延迟(例如,在'Job-3'已经开始时删除'Job-1')

2 b。写入命令行

通过在subprocess.Popen调用中添加stdin=subprocess.PIPE选项并在

之后使用proc.stdin.write("y")

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

相关内容

  • 没有找到相关文章

最新更新