1

env ファイルの 1 つをソースするときに問題が発生します (一連の変数のエクスポート)。

例えば:

...
export MY_ROOT=/Soft/dev/blah/blah
export MY_BIN=${MY_ROOT}/bin
...

結果は

$. my_env.sh
$echo $MY_BIN
/bint/dev/blah/blah

=> "/bin" は、変数の先頭に接尾辞を付けるのではなく、変数の先頭を上書きしているようです..

何か案が?

ところで、このファイルをソースするたびに、エラー メッセージが報告されます。

": Command not found"

これは奇妙です..このメッセージは、コンテンツ全体にコメントしても表示されます。

最初に呼び出されたシェルが良さそう#!/bin/sh、または#!/bin/bash.

制御文字についてはどうですか?Linuxでそれらをスクリーニングする方法は?

4

2 に答える 2

3

「:コマンドが見つかりません」は、UNIX /LinuxシェルスクリプトがMSWindowsシステムによって(誤って)処理されたときに見たエラーです。たとえば、WebCVSを使用してチェックアウトし、メモ帳またはワードパッドを使用して変更してから、再送信した場合です。

([Ctrl-M]実行可能ファイルが見つからないという不満があります。これは完全に有効ですが、UNIX / Linuxの場合は非常に不便で、やや疑わしいファイル名です)。

GNUcat -Aまたはod -xまたはhexdumpコマンドを使用してファイルを実行し、これらを確認します(そして、診断を確認します...またはtr -d、システムに適切な引用符とシェルの「逐語的」処理を使用して実行します(たとえばtr -d '[Ctrl-V],[Ctrl-M]'、一般的なLinuxシステムのBashで)。

使用するバージョンによっては、次のtrものを使用できる場合があります。tr -d '\r'またはtr -d \015(015はCRの8進数、「キャリッジリターン」、または^ M --- MS-DOSは、CR/LFペアをラインターミネーションとして使用していました。相互運用性に関しては、MS-DOSが見捨てられた深淵で腐敗する可能性がある多くの理由。単一文字の改行は他の人に実際の問題を引き起こしません...しかし、PAIRSは、主流のコンピューティングの歴史の他のすべてが使用されたときに実際の変換の問題を引き起こしますこのための単一の文字)。

そうそう、vim便利ですset ffset fileformatUNIX、MacOS、MS-DOSの回線終了規則を、使用しているプラ​​ットフォームに関係なく、どのコピーからでも処理できます。デフォルトでは、どのタイプの回線を検出するかvimを思い出してください。vimファイルが使用している終了を変更せずに残します(もちろん、新しいファイルの場合は、デフォルトでプラットフォームのネイティブになります)。

于 2009-11-03T11:32:20.470 に答える
1

これにより、ファイルの行末が修正されます。

dos2unix my_env.sh

とにかく現在のシェルで実行されるため、ソースとしてのみ使用されるファイルにシバンは必要ありません。ただし、コメントとして、人間の読者にとって有益な場合があります。

于 2009-11-03T12:57:47.303 に答える