私はシェルスクリプトを実行したかった:
-rwxr-x--x 1 root root 17234 Jun 6 18:31 create_mgw_3shelf_6xIPNI1P.sh
標準手順を実行しようとしましたが、このエラーが発生しました:
./create_mgw_3shelf_6xIPNI1P.sh
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
DEBUG cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**
どういう意味ですか? root
グループの下のroot
ユーザーとしてこれを行っていました。
ファイルにroot
ユーザーに対する正しい権限がないことを意味しますか?
これは権限の問題ではありません。権限に関するメッセージは表示されません。
/bin/bash^M: bad interpreter: No such file or directory
スクリプトは、/bin/bash^M
にあるシェルによって実行する必要があることを示しています。そのようなファイルはありません:/bin/bash
と呼ばれます。
^M
は キャリッジリターン文字 です。 Linuxは 改行文字 を使用して行の終わりを示しますが、Windowsは2文字のシーケンスCR LFを使用します。ファイルにはWindowsの行末記号があり、Linuxを混乱させています。
偽のCR文字を削除します。次のコマンドで実行できます。
sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh
Vimでは、:set ff=unix
を使用してファイルを保存するか、:set ff=dos
を使用してDOSフォーマットを再度取得することもできます。
ファイルにはDOS/Windowsスタイルの行末(CR LF)がありますが、UnixライクシステムではのみLF制御文字が改行として使用されます。
追加の CR制御文字 は、出力で^M
としてエンコードされて表示されます。 cat -A create_mgw_3shelf_6xIPNI1P.sh
を実行したときにも確認できます。
行末をDOS/WindowsスタイルからUnixスタイルに変換するために、dos2unix
というツールがあります。以下を使用してインストールします。
Sudo apt-get install dos2unix
次に、ファイルの行末を両方の方法で単に変換することができます
dos2unix FILENAME
unix2dos FILENAME
あなたの場合、以下のコマンドを実行するだけで、スクリプトファイルはインプレースで変換されます。
dos2unix create_mgw_3shelf_6xIPNI1P.sh
その後、Bashはファイルを正しく解釈できるはずです。
問題はDosで編集することではありません!
viでファイルを開き、unixを次のように設定します。
:set ff=unix
:wq
そしてそれはすべて大丈夫
vi <your script>
を実行します。
次に:set list
;スクリプト内の特殊文字が表示されます。
次に、文字を置き換えます。
:%s/^M//gc
[^M
と入力するには]を押します Ctrl + v + m]
他の回答で説明したように、これはフォーマットの問題です。したがって、答えはDOSからUnixスタイルの行末にフォーマットを変更することです。これは、ファイルを「その場で」修正するもう1つの簡単な方法です
fromdos file
パッケージtofrodos
で利用可能です:
Sudo apt-get install tofrodos
Geditを使用して、不要な文字を削除することもできます。 [ファイル]メニューで[名前を付けて保存]を選択し、行末タイプunix/Linuxを設定します。