問題の説明:
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を実行できないため、実行したいPythonスクリプトに次のshebangを追加しました.
#!~/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
この画面でどの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
python3
Shebang 行は引数の後にスクリプト名を使用して実行されます。おそらくこれを望まないで実行したり、python
代わりにpython3
。#!/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
ユーザーが作成した行が実行され、スクリプトが順番に実行され、Shebang行はコメントにスキップされます。スクリプトを実行可能にすると()直接実行できます。PATH
python
chmod +x essentialpairs_ttest_tissue_1.py
./essentialpairs_ttest_tissue_1.py
そしてシェバンラインが処理されます。
この場合、次のことができます。おそらく変数をリセットする Bash 起動設定がない場合は、PATH
最初の部分で変数を変更します。実行可能ファイル名がある場合は、その名前を使用するようにコマンドラインをpython
更新する必要があります。screen
python3
答え2
考えられる解決策
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
何が起こっているのかを調べることができることを確認してください。それでも問題がある場合は、上記の出力を含めるように質問を編集してください。
もう一つのこと:"$p"
妥当な理由がなく、実行中の作業を確実に知っていない限り、常にシェル変数(例:)へのすべての参照を引用する必要があります。