Bash
恢復0或_0這r0 or集群修改後的 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
,$0
,$_
和readlink /proc/$$/fd/255
. 它們都返回類似 的/cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script
內容,這是 SLURM 自動生成的路徑,與我送出的腳本無關。我懷疑是否有任何其他解決方案可以直接回答我尚未提及的問題,但是否有某種方法可以覆蓋集群正在執行的任何操作?我可以以某種方式恢復標準 bash 行為嗎?
問題已在評論中解決。
總結一下:事實證明,我沒有正確診斷出最初的問題。SLURM 沒有修改
$BASH_SOURCE
或$0
. 我以為它只是執行了我的腳本,但它實際上將我的腳本複製到了一個新位置 (/cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script
)。為了獲得我所期望的行為,我送出了帶有參數的作業,該--wrap
參數將指定的命令字元串包裝在 shell 腳本中。