使用'~';输入指令中的(又称tilde)似乎不起作用?

使用'~';输入指令中的(又称tilde)似乎不起作用?,tilde,snakemake,Tilde,Snakemake,这是我第一次尝试在输入中使用“~”。 当我将“~”转换为绝对路径时,它会起作用 证明它们是同一文件: (CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls ~/share/references/rRNA.ensg72.hg19.interval_list -rw-rw-r-- 1 fcchan users 24K Dec 12 2013 /home/tboyarski/share/references/rRNA.ensg72.hg19

这是我第一次尝试在输入中使用“~”。 当我将“~”转换为绝对路径时,它会起作用

证明它们是同一文件:

(CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls ~/share/references/rRNA.ensg72.hg19.interval_list
-rw-rw-r-- 1 fcchan users 24K Dec 12  2013 /home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list

(CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls /genesis/extscratch/clc/references/rRNA.ensg72.hg19.interval_list
-rw-rw-r-- 1 fcchan users 24K Dec 12  2013 /genesis/extscratch/clc/references/rRNA.ensg72.hg19.interval_list

(CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls /home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list
-rw-rw-r-- 1 fcchan users 24K Dec 12  2013 /home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list
不起作用:

rule intervalList:
    input:
       "~/share/references/rRNA.ensg72.hg19.interval_list"
作品:

rule intervalList:
    input:
       "/home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list"
我现在只尝试在输入指令中使用它。我可能会花点时间看看它是否可以作为一个输出指令(不是我需要的东西,只是好奇而已)

想法

编辑

@alvits能够指出,在对~求值之前,shell会将~转换为${HOME}。似乎在向蛇行提供~时,不会发生这种转换。简单的替代方法是始终使用${HOME},它可以在MacOSX和Linux上工作:)

我成功地使用了以下各项:

rule intervalList:
    input:
       "${HOME}/share/references/rRNA.ensg72.hg19.interval_list"
第二次编辑

用户指出我所认为的解决方案实际上并非如此。
解决方案是在输入指令中不使用“~”或“${HOME}”。

您可以尝试在
os.path.expanduser
中包装路径(在snakefile中导入操作系统后可用):

在Unix和Windows上,返回参数时,初始组件
~
~user
被该用户的主目录替换


(引自文档:)

我将结束这个问题

我最终同意了它的建议

我之所以选择它,是因为这是tilde所代表的,所以以非引用形式提供它是有意义的

expanduser包装虽然是一种可能性,但对于所需的内容来说,这是一种过分的做法

谢谢大家的帮助

2017/06/09-编辑:不要在Snakemake输入中使用“~”或“${HOME}”。

在看到约翰内斯·克斯特的评论后,我再次检查了我所做的事情,但我无法复制它

很抱歉给你带来了困惑。非常感谢您捕捉到这个错误J.K


我不确定我之前安装了什么。我最终改变了文件的使用方式,即使使用git,我也无法复制它

Shell中的
~
会进行波浪线扩展
~
本身就相当于
${HOME}
snakemake
不是外壳,也没有扩展。这似乎对我有好处。我将使用${HOME}。我真的需要相对论。非常感谢。嗯,实际上我看不出这是怎么回事。Snakemake不扩展${HOME}。因为它不是一个外壳,所以它从字面上看占据了每一条路径。它的行为就像python。你的逻辑是无可挑剔的J.K。我编辑了这篇文章来反映这一点。谢谢你的接球!