代码之家  ›  专栏  ›  技术社区  ›  billt

带变量的模块文件集别名问题

  •  0
  • billt  · 技术社区  · 6 月前

    使用csh shell的模块。csh不是我的选择,不能改变这一点。

    我想保持$jobRunName与别名中的完全相同,这样在shell中就可以使用shell env var。

    set alias似乎想把$改成!!,我在谷歌上找不到任何关于这方面的信息。

    在加载的模块文件中:

    set queueNameBatch "testQueue"
    set jobRunName "\$jobRunName"
    set jobQcmd             "sbatch -o ./logs/srun.%j.log -e ./logs/srun.%j.err -J $jobRunName -p "
    set-alias qt "$jobQcmd $queueNameBatch "
    
    which qt
    qt:      aliased to sbatch -o ./logs/srun.%j.log -e ./logs/srun.%j.err -J !!:jobRunName -p  testQueue 
    

    我之前曾尝试在别名字符串周围使用{}而不是“”,但这只会让我

    set-alias qt {$jobQcmd $queueNameBatch }

    which qt
    qt:      aliased to !!:jobQcmd !!:queueNameBatch 
    

    所以这里的双引号似乎更好

    任何想法如何解决这个问题!!:返回到预期的$符号?

    0 回复  |  直到 6 月前
        1
  •  0
  •   Xavier Delaruelle    6 月前

    模块更改csh shell的变量引用。使用 puts modulefile命令将有助于获取准确的预期别名代码

    set qt_alias {sbatch -o ./logs/srun.%j.log -e ./logs/srun.%j.err -J $jobRunName -p testQueue}
    
    if {[module-info shelltype csh] && [module-info mode load]} {
        puts stdout "alias qt \"$qt_alias\";"
    } else {
        set-alias qt $qt_alias
    }
    
    推荐文章