だから私はこの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
。私は怠惰で式をテストしておらず、よく使うより単純な式に置き換えました。