2019年7月25日木曜日

たまにひっかかる、改行DOS

症状:
Debian/LinuxのPCを起動して、最初にコンソールを開くと、何もしてないのにエラー表示。

: command not found
bash: /home/xxxx/.bashrc: 行 6: 予期しないトークン `$'in\r'' 周辺に構文エラーがあります
'ash: /home/xxxx/.bashrc: 行 6: `case $- in
$

原因:
.bashrcを編集した際、Dos/Windows改行で保存してしまった。

対応:
改行\r\nを \r にすればいい。

確認:
・file コマンドで見てみる。
$ file .bashrc
.bashrc: UTF-8 Unicode text, with CRLF line terminators

'CRLF'となってる。通常のUNIX系CR キャリッジ・リターンだけなら、
"with CRLF line terminators"は表示されない。
(LFは ラインフィード)

・catで見てみる
$ cat -e .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.^M$
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)^M$
# for examples^M$
^M$.....略

'^M$' が、Windows/Dosの改行

作業:
dos2unix をinstallして\r\nを\rにする ( unix2dosというコマンドも有る)。
たぶん、sed, awk, perl でも簡単に置換できる。

お手軽に、KDEのエディタ Kate (≒KWrite)から ツール→行末→UNIX→保存 してログアウト、ログイン という対処で済ました。


付録:
立ち上がりは ash? dashと思っていた。
$ ls -l /bin/sh
...略...   /bin/sh -> dash

やっぱり dash?
本来の ashをカスタマイズした dash (debian ash)というのが別にあるらしい。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。