Bash

恢復0或_0這r0 or集群修改後的 BASH_SOURCE

  • February 22, 2019

我正在使用共享 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 腳本中。

引用自:https://unix.stackexchange.com/questions/498844