$ 0または$ BASH_SOURCEがクラスターによって変更された後に復元されます。

$ 0または$ BASH_SOURCEがクラスターによって変更された後に復元されます。

共有SLURMクラスタを使用しています。スクリプト自体内でbashスクリプトへのパスを取得しようとしています。

ここにはすでに素晴らしいスレッドがあります。https://stackoverflow.com/questions/59895/get-the-source-directory-of-a-bash-script-from-within-the-script-itself。残念ながら、これらの解決策のどれも私にとって効果的ではありませんでした。 bashスクリプトを正常に実行すると動作しますが、スクリプトをジョブとして送信すると動作しません。私は、、、および$BASH_SOURCEを試しました。それらはすべて同様のものを返します。これはSLURMによって自動的に生成されたパスであり、私が送信したスクリプトとは何の関係もありません。まだ言及していない質問に直接答えることができる他の解決策があるかどうか疑問です。しかし、クラスタが実行するアクションをオーバーライドする方法はありますか?どういうわけか標準bash動作を復元できますか?$0$_readlink /proc/$$/fd/255/cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script

答え1

コメントで問題を修正しました。

要約すると、元の問題を正しく診断できなかったことがわかりました。 SLURMは変更してい$BASH_SOURCEないか$0、...私はスクリプトを実行したと思いましたが、実際にはスクリプトを新しい場所(/cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script)にコピーしました。予想される動作を得るために、--wrapシェルスクリプトで指定されたコマンド文字列をラップするパラメータを含むジョブを送信しました。

関連情報