如何将 bash 脚本参数设置为文件减去扩展名

如何将 bash 脚本参数设置为文件减去扩展名

所以我有这个 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变量中删除尾随字符,您的想法是正确的,我很懒,没有测试您的表达式,而是用我经常使用的表达式替换它,并且更简单。

相关内容