1

~/.bashrc_aliases.sh私は自分のファイルをソースとして (bash エイリアスを含むファイル) を持っています/持っていました~/.bashrc。この~/.bashrc_aliases.shファイルは、たまたま DOS 形式であったdos2unixため、ファイルを実行して修正しました。

このエイリアス ファイルが 'DOS' 形式の場合alias、Bash でコマンドを入力すると、行がではなく文字でalias始まり、エイリアスが実際には機能しないため、次のような結果が得られました。'a

": そのようなファイルまたはディレクトリはありません", "'s: 無効なオプション -- '"

ファイルが DOS 形式の場合、何が起こっていましたか? コマンドが文字aliasで始まる行を返すのはなぜですか? '上記のエラーが発生したのはなぜですか?


kenorb、triplee bash によって重複としてマークされました

この質問は以前に尋ねられており、すでに回答があります。これらの回答があなたの質問に完全に対応していない場合は、この質問を編集して違いを説明するか、新しい質問をしてください。

リンクされた質問は、問題を解決する方法を尋ねることでした。この質問は、問題の解決方法ではなく、問題の発生中に何が起こっていたかについての説明を求めていました。

4

2 に答える 2

3

最初の部分は答えやすいです。DOS の改行「文字」はペア\r\n(キャリッジ リターン、ラインフィード) です。bashはキャリッジ リターンを単なる別の文字として解釈するため、エイリアスの末尾に追加されます。例えば

alias foo='echo foo'

\rエイリアスの本文に末尾を追加します。コマンドによって表示されるとalias、そのキャリッジ リターンはカーソルを行頭に移動してから最終行を出力します (これによりin'が上書きされます)。つまり、代わりにaalias

$ alias
alias foo='echo foo'

あなたが持っている

$ alias
'lias foo'=echo foo

エラーは、定義したエイリアスによって異なる可能性がありますが、いずれの場合も、末尾のキャリッジ リターンがエラー メッセージに同じように影響します。カーソルが行の先頭に移動し、メッセージの末尾が先頭を上書きします。

于 2014-09-02T17:47:41.380 に答える