2016-08-10 23 views
0

うまく動作しているbashスクリプトがあります。 /usr/local/app1/aaa.shがコピー後にbashスクリプトが正しく動作しない

私はAPP2からそれを実行した場合

を/usr/local/app2/aaa.shにコピー、それは以下のエラーMSGをスローしましょう

: command not foundts.sh: line 10: 
: command not foundts.sh: line 17: 
: command not foundts.sh: line 19: 
: command not foundts.sh: line 26: 
: command not foundts.sh: line 30: 

私のローカルデスクにコピーしてから/usr/local/app3/aaa.shにコピーすると、同じことが起こります。

しかし、どういうわけか私はscpで他のサーバーにコピーします。それはうまくいく。

何が起こっているのか理解してくれる人はいますか?

おかげ

+0

'/ usr/local/app1 /'のローカルスクリプトは 'aaa.sh'から呼び出されますか?その場合、aaaを別のディレクトリに移動すると、それらのスクリプトに直接アクセスすることはできなくなるため、コピーする必要があります。 – TW80000

答えて

1

あなたがfoundts.shためにあなたのコード内で相対的(というよりも絶対)の参照を持っているように見えます。

私はfoundts.shがローカルボックス上のようにサーバー上の同じ相対ディレクトリに存在する別のカスタムスクリプトであることを推測していると言う、それに応じて参照されている、というよりも、/usr/local/app2/foundts.sh./foundts.shを言います。

呼び出しスクリプトを別のフォルダに移動すると、相対パスはファイルの実際の場所を指していません。

1

ファイルのコピーには、UNIXスタイルの行末(改行のみ)ではなく、DOS/Windowsスタイルの行末(キャリッジリターンの後ろに改行)があります。これは、キャリッジリターンがコマンドの一部である(コマンドが見つからないエラーを引き起こす)と、文字化けしたエラーメッセージを出すと考えているので、シェルを大いに混乱させます。

たとえば、スクリプトファイルを印刷することで確認できます。 cat -vet /usr/local/app2/aaa.sh - 行が "^ M $"で終わるとDOS/Windowsの終わりがあり、 "$"で終わるとUNIXの終わりがあります。

正確にどのようにスクリプトをコピーしていますか?

関連する問題