Windows で編集されたシェル スクリプトが予期しないエラー メッセージを表示する

Windows で編集されたシェル スクリプトが予期しないエラー メッセージを表示する

リモート サーバーに SSH 接続するスクリプトを実行する際に問題が発生しています。コマンド ラインから SSH 接続するだけではサーバーに問題なく接続できますが、これを行うスクリプトを実行すると、「名前またはサービスが不明です」というエラーが発生します。/etc/hosts に IP アドレスとホスト名を追加しましたが、効果はありませんでした。

私のスクリプトは単純です:

 #!/bin/bash 
ssh username@hostname

何か間違ったことをしているのでしょうか? 明らかに、このためだけのスクリプトは必要ありませんが、これが機能したら実行するコマンドを追加するつもりです。

答え1

このスクリプトの問題点は、Windowsのような別のシステムからファイルをコピーするときに、改行\nと復帰が追加されることです\r\n。改行の詳細については、改行ウィキペディアのエントリ。

問題を説明するために、短い断片をアップロードしましたここ問題を解決する方法を説明しています。

要するに:使用tr変な行末を削除するには

tr -d \\r <yourscript>newscript && mv newscript yourscript

その後、スクリプトを再度実行します。

または、artm が示唆したとおりです。

エディタ内ではvim

:set ff=unix

ffの略称ファイル形式) を実行してファイルを保存しますshift+zz

関連情報