如何解决如何在Slurm中使用用户输入
我正在寻找通过SLURM在shell提示中使用输入的方法。例如,当我使用简单的bash脚本时:
#!/bin/bash
echo What\'s the path of the files?
read mypath
echo What\'s the name you want to give to your archive with the files of $mypath?
read archive_name
echo Ok,let\'s create the archive $archive_name
for i in $mypath/*;
do if [[ -f $i ]]; then
tar -cvf $archive_name $mypath/*;
fi;
done
然后在提示中使用:
bash my_script.sh
What's the path of the files?
/the/path/of/the/files
What's the name you want to give to your archive with the files of $mypath?
my_archive.tar
它会创建档案my_archive.tar
。但是现在,我必须在SLURM中使用该脚本。当我使用sbatch my_script.sh
时,它将自动提交作业中的脚本,而我无法添加输入:/the/path/of/the/files
和my_archive.tar
有什么主意吗?
解决方法
您有两个选择:
修改脚本,使其使用参数而不是交互式问题。
该脚本将如下所示:
#!/bin/bash
mypath=${1?Usage: $0 <mypath> <archive_name>}
archive_name=${2?Usage: $0 <mypath> <archive_name>}
echo Ok,let\'s create the archive $archive_name
for i in $mypath/*;
do if [[ -f $i ]]; then
tar -cvf $archive_name $mypath/*;
fi;
done
此脚本将使用bash my_script.sh /the/path/of/the/files my_archive.tar
而不是bash my_script.sh
运行。第一个参数在脚本的$1
变量中可用,第二个参数在$2
中,依此类推。请参见this for more info。
如果脚本未使用至少两个参数运行,则语法$(1?Usage...)
是发出错误消息的简单方法。参见this for more information
或
使用Expect自动回答问题
expect命令是(来自文档)
根据脚本与其他交互式程序“对话”的程序。
您可以这样使用Expect脚本:
#!/usr/bin/expect
spawn my_script.sh
expect "What's the path of the files?"
send "/the/path/of/the/files\r"
expect -re "What's the name you want to give to your archive with the files of .*"
send "my_archive.tar\r"
expect
在将Expect脚本设为可执行文件后,它提供了以下内容:
$ ./test.expect
spawn my_script.sh
What's the path of the files?
/the/path/of/the/files
What's the name you want to give to your archive with the files of /the/path/of/the/files?
my_archive.tar
Ok,let's create the archive my_archive.tar
您可以在Slurm提交脚本中运行Expect脚本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。