1

これが取引です。Win7環境にcygwinをインストールしました。これは、コマンド ラインで実行する一連の処理であり、すべてが機能します。

ファイル mpc.exe は、Intel Fortran Compiler によって作成された 64 ビットの実行可能ファイルです。

cp ./dir1/dir2/mpc.exe ./mpc.exe
./mpc.exe arg1 arg2

すべて順調

そのためのスクリプトを作成したい。その理由は、arg2 のさまざまな値に対してコードを実行したいからです。ファイル「script_mpc.sh」には、次の内容が含まれています。

#!/bin/sh
cp ./dir1/dir2/mpc.exe ./mpc.exe
./mpc.exe arg1 arg2
wait
return_val=$?
[ $retval -eq 0 ] && echo "successfully executed "

コマンドラインに戻り、

$>chmod +x script_mpc.sh
$>./script_mpc.sh

エラー:

./script_mpc.sh: line 2: ./mpc.exe: No such file or directory

とてもフレッシュな初心者です。外出先でのシェル コマンドとスクリプトの学習。助けてください。

4

1 に答える 1

1

Cygwin を使用しています。

私はこの行に賭けます:

cp ./dir1/dir2/mpc.exe ./mpc.exe

Windows スタイルの CR-LF 行末があります。シェル (sh または bash) は CR をファイル名の一部として解釈するため、ファイルを"./mpc.exe\r".

でスクリプトをフィルタリングしますdos2unix。最初に man ページを読んでください。ほとんどのテキスト フィルターとは異なり、通常は入力ファイルを上書きします。

バックグラウンド:

Unix は、単一の ASCII LF 文字を使用して、テキスト ファイルの行末をマークします。Windows は CR-LF ペアを使用します。Cygwin は、Windows 上の Unix ライクなエミュレーション レイヤーであるため、競合する行末表現に関する問題の多くの原因となる傾向があります。

特に、Unix シェルは通常、CR を行末標識の一部として認識しません。代わりに、ファイルの見方によっては、見えない傾向がある別の文字として扱います。

LF と CR-LF の行末が混在している可能性があります。CR-LF エンディングを一貫して使用すると、#!/bin/shor#!/bin/bash行は認識されません。

可能であれば、Unix スタイルのエディター (vim、emacs、nano など、お好みのもの) のみを使用して、シェル スクリプトを編集してください。たとえば、メモ帳やワードパッドを使用してスクリプトを作成すると、この種の問題に遭遇する可能性があります。

于 2012-07-20T19:58:20.203 に答える