bash - 配列 - シェルスクリプトが実行されていない、コマンドが見つかりません




シェルスクリプト 配列 (8)

.profileパスに以下の行を追加してください

PATH=$PATH:$HOME/bin:$Dir_where_script_exists

export PATH

これで、あなたのスクリプトは、

ラジ・ダグラ

私は、UNIXプログラミング(MacOSX Mountain Lion on Terminal経由で動作している)の非常に新しいことです。 私は、最終的にデータ管理の目的でperlとpythonを使用するバイオインフォマティクスと分子メソッドのコース(私たちは2つのクラスを持っていました)から基礎を学びました。 とにかく、ファイルのグループからデータを取り出し、特定のプログラム(Migrate-N)が読むことができる形式で新しいファイルに書き込むためのシェルスクリプトを書くことが任されています。

私は、コマンドラインに入力するときに、私が独立して必要とするものを正確に行うためにいくつかの機能を持っていますが、それらをすべてスクリプトに入れて実行しようとすると、エラーが発生します。 ここに詳細があります(私は長さについてお詫び申し上げます):

#! /bin/bash

grep -f Samples.NFCup.txt locus1.fasta > locus1.NFCup.txt
grep -f Samples.NFCup.txt locus2.fasta > locus2.NFCup.txt
grep -f Samples.NFCup.txt locus3.fasta > locus3.NFCup.txt
grep -f Samples.NFCup.txt locus4.fasta > locus4.NFCup.txt
grep -f Samples.NFCup.txt locus5.fasta > locus5.NFCup.txt
grep -f Samples.Salmon.txt locus1.fasta > locus1.Salmon.txt
grep -f Samples.Salmon.txt locus2.fasta > locus2.Salmon.txt
grep -f Samples.Salmon.txt locus3.fasta > locus3.Salmon.txt
grep -f Samples.Salmon.txt locus4.fasta > locus4.Salmon.txt
grep -f Samples.Salmon.txt locus5.fasta > locus5.Salmon.txt
grep -f Samples.Cascades.txt locus1.fasta > locus1.Cascades.txt
grep -f Samples.Cascades.txt locus2.fasta > locus2.Cascades.txt
grep -f Samples.Cascades.txt locus3.fasta > locus3.Cascades.txt
grep -f Samples.Cascades.txt locus4.fasta > locus4.Cascades.txt
grep -f Samples.Cascades.txt locus5.fasta > locus5.Cascades.txt

echo 3 5 Salex_melanopsis > Smelanopsis.mig
echo 656 708 847 1159 779 >> Smelanopsis.mig
echo 154 124 120 74 126 NFCup >> Smelanopsis.mig
cat locus1.NFCup.txt locus2.NFCup.txt locus3.NFCup.txt locus4.NFCup.txt locus5.NFCup.txt >> Smelanopsis.mig
echo 32 30 30 18 38 Salmon River >> Smelanopsis.mig
cat locus1.Salmon.txt locus2.Salmon.txt locus3.Salmon.txt locus4.Salmon.txt locus5.Salmon.txt >> Smelanopsis.mig
echo 56 52 24 29 48 Cascades >> Smelanopsis.mig
cat locus1.Cascades.txt locus2.Cascades.txt locus3.Cascades.txt locus4.Cascades.txt locus5.Cascades.txt >> Smelanopsis.mig

一連のgrepは、各遺伝子座の各部位のDNA配列データを新しいテキストファイルに取り出すだけです。 Samples ... txtファイルにはサイトのサンプルID番号があり、.fastaファイルにはサンプルIDで整理されたシーケンス情報があります。 私はそれを個別に実行する場合、コマンドラインでグリーティングは正常に動作します。

コードの2番目のグループは、私が最後に必要とする実際の新しいファイルを作成します.migで終わります。 エコーラインは、プログラムが情報を必要とするカウント(遺伝子座あたりの塩基対、分析における集団、サイトごとの試料など)に関するデータである。 cat行は、エコー行で指定されたサイト固有の情報の下にあるすべてのgreppingによって作成されたサイトデータによって、locusを一緒にマッシュします。 あなたは間違いなく絵を手に入れます。

シェルスクリプトを作成するには、Excelで起動していたので、セルを簡単にコピー/貼り付け、タブ区切りのテキストとして保存してから、TextWranglerで開き、.shファイルとして保存する前にタブを削除します(Lineスクリプトで使用されているすべてのファイルと同じディレクトリに、Unix(LF)とEncoding:Unicode(UTF-8))を追加します。 私はchmod +x FILENAME.shchmod u+x FILENAME.shを使って、実行可能であることを確認しようとしましたが、役に立たなかった。 私がスクリプトを1つのgrep行(#!/ bin / bashの最初の行で)にカットしても、動作させることはできません。 このプロセスは、コマンドラインに直接入力すると少し時間がかかります。これらのファイルはいずれも160KBを超えず、いくつかはかなり小さいからです。 これは私が入力したもので、ファイルを実行しようとすると何が得られますか(HWは正しいディレクトリです)

localhost:HW Mirel$ MigrateNshell.sh
-bash: MigrateNshell.sh: command not found

私は今この2日間邪魔してきたので、どんなインプットも高く評価されます! ありがとう!!


Marc Bによって指摘されているように、最初の行を次のように変更します

#!/bin/bash 

スクリプトを実行可能ファイルとしてマークし、コマンドラインから実行します

chmod +x MigrateNshell.sh
./MigrateNshell.sh

スクリプトでパラメータとして渡すコマンドラインからbashを実行するだけです

/bin/bash MigrateNshell.sh

chmod u+x MigrateNshell.sh試してみてください


また、/ bin / bashがbash ....の適切な場所であることを確認してください。もしあなたがその例をどこかの例から取ったのであれば、あなたの特定のサーバーと一致しないかもしれません。 あなたがbashのために無効な場所を指定しているなら、あなたは問題を起こすでしょう。


スクリプトの最初にシバン行を追加することについては、いくつかの良いコメントがあります。 追加の移植性のために、 envコマンドを使用するための推奨事項を追加したいと思います。

#!/bin/bashはシステム上の正しい場所であるかもしれませんが、普遍的ではありません。 さらに、それはユーザーの好みの bashではないかもしれません。 #!/usr/bin/env bashはパスにある最初のbashを選択します。


セキュリティ上の理由から、シェルは実行可能ファイルの現在のディレクトリ(デフォルト)を検索しません。 あなたは具体的でなければならず、あなたのスクリプトがカレントディレクトリ( . )にあることをbash伝えます:

$ ./MigrateNshell.sh

最初:

chmod 777 ./MigrateNshell.sh

次に:

./MigrateNshell.sh

または、$ PATH変数で認識されるディレクトリにプログラムを追加します。 例: パス変数の例 ./使わずにプログラムを呼び出すことができます。


私もシェルスクリプトの新機能ですが、同じ問題がありました。 スクリプトの最後に空白行があることを確認してください。 それ以外の場合は動作しません。





scripting