如何使用 Slurm 的用户输入
How to use User Inputs with 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: [=10=] <mypath> <archive_name>}
archive_name=${2?Usage: [=10=] <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
。第一个参数在脚本的 </code> 变量中可用,第二个参数在 <code>
中,依此类推。参见 this for more info.
如果脚本不是 运行 且至少有两个参数,语法 $(1?Usage...)
是发出错误消息的简单方法。参见 this for more information
或者,
使用 Expect 自动回答问题
expect 命令是(来自文档)
a program that "talks" to other interactive programs according to a script.
您可以像这样使用 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 脚本。
我正在寻找通过 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: [=10=] <mypath> <archive_name>}
archive_name=${2?Usage: [=10=] <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
。第一个参数在脚本的 </code> 变量中可用,第二个参数在 <code>
中,依此类推。参见 this for more info.
如果脚本不是 运行 且至少有两个参数,语法 $(1?Usage...)
是发出错误消息的简单方法。参见 this for more information
或者,
使用 Expect 自动回答问题
expect 命令是(来自文档)
a program that "talks" to other interactive programs according to a script.
您可以像这样使用 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 脚本。