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%の場合、スクリプトを実行しているシェルがログインシェルとして機能したくないので、一番-l上の行からそのオプションを削除しました。
  • $( ... )バックティック/バックティックを使用する従来の方法よりも、コマンド出力をキャプチャするより良い方法があることがよくあります。特殊文字と1つのキャプチャを別のキャプチャ内にネストすることは、問題がはるかに少なくなります。
  • 変数から末尾の文字を削除する方法に関する正しいアイデアがあります$out_file。私は怠惰で式をテストしておらず、よく使うより単純な式に置き換えました。

おすすめ記事