问题陈述:
bash 脚本用于为名称列表中的每个名称创建一个新的屏幕会话。对于每个名称,都会使用该名称作为输入来运行 python 脚本。 bash 脚本设置包含正确版本的 python 的路径(anaconda 包中的 python 3):
#!/bin/sh
export PATH=~/anaconda3/bin/python:$PATH
while read p; do
screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
done <cells.txt
如上所述设置路径不允许运行正确版本的 python,因此我将以下 shebang 添加到要运行的 python 脚本中:
#!~/anaconda3/bin/python python3
仍然没有骰子:/usr/bin/python
在不应该使用的时候仍然被使用。如何让这个程序根据我指定的路径运行python的版本?
尝试1:
新舍邦:
#!/inside/home/thjmatth/anaconda3/bin/python/
新的 bash 脚本:
#!/bin/sh
export PATH=~/anaconda3/bin/python:$PATH
while read p; do
screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
done <cells.txt
python 脚本的新权限:
chmod +x essentialpairs_ttest_tissue_1.py
错误:
bash: python3: command not found
在该屏幕中运行 which python 仍然显示/usr/bin/python
解决方案:
与上面的尝试 1 相同,但更改了 bash 脚本的第 3 行,使其成为目录而不是可执行文件:
export PATH=~/anaconda3/bin/python:$PATH
答案1
export PATH=~/anaconda3/bin/python:$PATH
这看起来像是可执行文件的路径。PATH
应包含目录:
export PATH=~/anaconda3/bin:$PATH
#!~/anaconda3/bin/python python3
- Shebang 线需要实际路径并且不执行波形符扩展(那是在你的外壳中)。写入可执行文件的实际路径,以
/
. ~/anaconda3/bin/python
该 shebang 行将使用参数运行python3
,后跟脚本名称。您可能不希望这样,而是运行python
orpython3
。#!/home/thomas/anaconda3/bin/python
screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
如果您在更新 shebang 行后仍在运行此行,它将被忽略;来自python3
您的PATH
(与!不同python
)将被执行并依次运行脚本,并且将跳过 shebang 行作为注释。如果使脚本可执行(chmod +x essentialpairs_ttest_tissue_1.py
),则可以直接运行它:
./essentialpairs_ttest_tissue_1.py
并且 shebang 线将被处理。
在这种情况下,您可以大概除非您有重置变量的 Bash 启动配置,否则只需修复PATH
第一部分中的变量即可。如果可执行文件名称为python
,请确保更新screen
命令行以使用该名称python3
。
答案2
可能的解决方案
关于你的第二次尝试,使用 python 脚本中的 shebang:
- 你不能
~
在 shebang 中使用;它必须是实际路径 (#!/inside/home/thjmatth/...
)。 - 目录名和程序名之间不能有空格;它一定要是
#!/inside/home/thjmatth/anaconda3/bin/python/python3
。
完整性检查:您是否有一个名为 的目录
/inside/home/thjmatth/anaconda3/bin/python
,其中包含名为 的可执行程序python3
(即解释程序的完整路径名是
/inside/home/thjmatth/anaconda3/bin/python/python3
?
值得尝试的东西
更改您的脚本来执行此操作:
#!/bin/sh
export PATH=~/anaconda3/bin/python:$PATH
while read p; do
type python3
screen -dm -S "$p" bash -c "type python3; exec sh"
done <cells.txt
看看你是否能弄清楚发生了什么。如果您仍然遇到困难,请编辑您的问题以包含上述输出。
另一件事:
您应该始终引用对 shell 变量的所有引用(例如,"$p"
),除非您有充分的理由不这样做,并且您确定您知道自己在做什么。