所以我有这个 bash 文件test.sh
#!/bin/bash -l
out_file=`basename "$0"`
#SBATCH --gpus=1
#SBATCH -p long
#SBATCH -o err_${out_file::-3}.out
我想将错误输出到err_test.out
,这就是我在上面的文件中尝试执行的操作,但它给出了错误。不喜欢=
如何将输出文件设置为我指定的文件名。
答案1
这是一般方法:
#!/bin/bash
out_file=$(basename "$0")
echo sbatch --gpus=1 -p long -o "err_${out_file%.*}.out"
如果输出了sbatch
您正在尝试的命令,请删除echo
并尝试一下。
几点评论:
- 99% 的情况下,您不希望运行脚本的 shell 充当登录 shell,因此我
-l
从顶行删除了该选项。 - 捕获命令输出的方法
$( ... )
通常比使用反引号/反引号的旧式方法更好。特殊字符以及将一个捕获嵌套在另一个捕获中的问题要少得多。 - 关于如何从
$out_file
变量中删除尾随字符,您的想法是正确的,我很懒,没有测试您的表达式,而是用我经常使用的表达式替换它,并且更简单。