0

これは、Linux での作業に関する一般的なソフトウェア エンジニアリングの問題です。ソースコード、主にスクリプトがあるとします。テキスト データを操作し、テキスト ファイルを入出力として受け取ります。作業中のディレクトリの変更を最小限に抑えながら、srcコードとデータを適切に分離する方法を考えています。2 つの可能性があります。

  1. コードとデータを一緒に混ぜます。このようにして、ディレクトリの移行が最小限に抑えられ、作業中にファイルへのパスを入力する必要がなくなります。ほとんどの場合、次のように呼び出します。

    script1 data-in data-out # call script
    vi data-out # view result
    

    問題は、コード ファイルとデータ ファイルの数が増えるにつれて、コード ファイルとデータ ファイルの両方の長いリストに直面すると、見た目が煩雑になることです。

  2. コードとデータを 2 つのフォルダー ("src" と "data" など) に分けます。「src」フォルダーにいる場合、上記のアクションを実行するには次が必要です。

    script1 ../data/data-in ../data/data-out # call script
    vi ../data/data-out or cd data; vi data-out # view result
    

    親ディレクトリ「../data」の余分な入力は、特にスクリプトの簡単なテストがたくさんある場合に面倒です。

データ フォルダーで、逆の方法で行うことをお勧めします。しかし、同様に、../src/script1 を呼び出す必要があります。ここでも、接頭辞「../src」を入力する手間がかかります。ええ、「src」を PATH に追加できます。しかし、親子ディレクトリ間でスクリプト間に依存関係がある場合はどうなるでしょうか? たとえば、「src」の下に「subsrc/script2」があり、script1 内で「./subsrc/script2 ...」を呼び出すとします。次に、「data」フォルダーの下に「subsrc」フォルダーがないため、「data」フォルダーで script1 を呼び出すと、エラーがスローされます。

コードとデータを適切に分離し、ディレクトリの変更を最小限に抑えることは、相反する要件のようです。何か提案はありますか?ありがとう。

4

2 に答える 2

2

もう少しコーディングが必要ですが、コマンドラインから環境変数を設定してデータディレクトリを指定できますか?

export DATA_INPUT_DIR=/path/to/data
export DATA_OUTPUT_DIR=/path/to/outfiles

次に、スクリプトはこれらのディレクトリに関連するファイルを処理できます。

# Set variables at the top of your scripts:
in_dir="${DATA_INPUT_DIR:-.}"   # Default to current directory
out_dir="${DATA_OUTPUT_DIR:-.}" # Defailt to current directory

# 1st arg is input file.  Prepend $DATA_INPUT_DIR unless path is absolute.
infile = "$1"
[ "${1::1}" == "/" ] || infile="$DATA_INPUT_DIR/$infile"


# 2nd arg is output file.  Prepend $DATA_OUTPUT_DIR unless path is absolute.
outfile = "$2"
[ "${2::1}" == "/" ] || outfile="$DATA_OUTPUT_DIR/$outfile"

# Remainder of the script uses $infile and $outfile.

もちろん、いくつかのターミナルウィンドウを開くこともできます。コードを操作するためのものと、コードを実行するためのものです。:-)

于 2012-04-28T03:42:06.033 に答える
2

シェルのcd -機能に加えて PATH を設定して、これを整理します — おそらく、いくつかのスクリプトが役立つでしょう。

プログラムがビルドされるソース ディレクトリが PATH の先頭にあることを確認します。cdデータ ディレクトリまたはソース ディレクトリのいずれかにアクセスし (データ ディレクトリまたはソース ディレクトリのディレクトリをキャプチャするd=$PWD場合がありますs=$PWD)、別のディレクトリに切り替えます (ディレクトリ名を再度キャプチャします)。これで、switchを使用して 2 つのディレクトリをcd -切り替えることができます。

「コード作業」モードか「データ作業」モードかによって、主に適切なディレクトリで作業します。(cd $source_directory; make "$@")何かを構築する必要がある場合は、スクリプトを実行して構築できるように、簡単なスクリプトを作成することもできます。どちらのディレクトリのファイルも、swift cd -plusvimまたはvim $other_dir/whichever.ext. ソース ディレクトリは PATH 上にあるため、コマンドへのフル パスを指定する必要はありません。

エイリアスを使用しalias r="fc -e -"てコマンドを繰り返します。たとえば、最後のvimコマンドを繰り返すには、r v; 最後のmakeコマンドr m; 等々。

私はいつもこの種のことをしています。私が取り組んでいるソフトウェアには、フル ビルド用に約 50 のディレクトリがありますが、通常は一度に 2 つずつ作業しています。私は、作業している場所に基づいてシステムを再構築するためのスクリプトのセットを持っています (chk.xyzlibそしてchk.pqrlib、対応するディレクトリのセットを構築します。たとえば、ライブラリごとに 2 つのディレクトリ)。私はエイリアスよりもスクリプトを好みます。スクリプトを使用すると引数をより簡単に補間できますが、エイリアスを使用すると、引数を追加することしかできません。表記法はエイリアスでは(cd $somewhere; make "$@")機能しません。

于 2012-04-28T03:17:11.823 に答える