質問
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 上でそれらをスクリーニングするにはどうすればよいですか?
解決
これにより、ファイル内の行末が修正されます。
dos2unix my_env.sh
とにかく現在のシェルで実行されるため、ソースされるだけのファイルにはシバンは必要ありません。ただし、コメントとして人間の読者にとっては有益かもしれません。
他のヒント
":コマンドが見つかりません」というエラーは、UNIX/Linux シェル スクリプトが MS Windows システムによって (誤って) 処理されたときに発生するエラーです。たとえば、WebCVS を使用してチェックアウトされ、メモ帳またはワードパッドを使用して変更され、再送信された場合などです。
([Ctrl-M] 実行可能ファイルが見つからないと文句を言っています。これは完全に有効ですが、UNIX/Linux にとっては非常に不便でやや疑わしいファイル名です)。
GNU を介してファイルを実行する cat -A
または od -x
または hexdump
これらを確認するためのコマンド (そして診断を確認します...)またはそれを実行します tr -d
システムに適切な引用符とシェルの「逐語的」処理を使用します。(例えば tr -d '[Ctrl-V],[Ctrl-M]'
一般的な Linux システムの Bash では)。
のバージョンに応じて、 tr
以下を使用できるかもしれません: tr -d '\r'
または tr -d \015
(015 は CR、「キャリッジ リターン」、または ^M の 8 進数です --- MS-DOS は行末として CR/LF ペアを使用していました。これは MS-DOS が見捨てられた奈落の中で朽ち果てる多くの理由の 1 つにすぎません)相互運用性に関しては。単一文字の行末記号は、他の人にとっては実際的な問題を引き起こすことはありません...しかし、主流のコンピューティングの歴史における他のすべてが単一の文字を使用していた場合、PAIRS は実際の変換の問題を引き起こします)。
そうそう、 vim
便利なものがある set ff
(別名 set fileformat
UNIX、MacOS、および MS-DOS の任意のコピーの行終了規則を処理できるオプション vim
どのプラットフォームを使用しているかに関係なく。を思い出したようです vim
デフォルトでは、ファイルが使用している行末記号のタイプを検出し、それを変更しないようにします (もちろん、新しいファイルについてはプラットフォームのネイティブがデフォルトになります)。