development

'\ r': 명령을 찾을 수 없음-.bashrc / .bash_profile

big-blog 2020. 4. 1. 08:00
반응형

'\ r': 명령을 찾을 수 없음-.bashrc / .bash_profile


Cygwin을 사용하여 파일을 JAVA_HOME영구적 으로 설정하려고하는 창이 .bashrc있습니다.

.bashrc :

export PATH="$JAVA_HOME/bin:$PATH"  
export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05"

.bash_profile :

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

cygwin 실행 :

-bash: $'\377\376if': command not found
-bash: $'then\r': command not found
: No such file or directorysu//.bashrc
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi'
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi'

다른 시스템 용 자습서에서 명령을 받았는지 또는 단계가 누락되었는지 확실하지 않습니다. 또는 공백으로 인해 명령이 제대로 실행되지 않습니다.

비슷한 질문을 여러 번 보았지만 질문에 오류가 정확히있는 질문을 찾지 못했습니다.


내 집 경로 :

$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/

따라서 파일을 올바른 위치에 배치해야한다고 생각합니다.


Cygwin에서 다른 모든 것이 실패하면 ...

dos2unix해당 파일에서 명령을 실행하십시오 .

다음과 같은 오류 메시지가 표시되면 도움이 될 수 있습니다.

-bash: '\r': command not found

Windows 스타일의 개행 문자는 Cygwin에서 문제를 일으킬 수 있습니다.

dos2unix명령은 개행 문자를 수정하여 Unix / Cygwin과 호환되도록합니다.

주의 : dos2unix 명령은 파일 을 제 위치에서 수정 하므로 필요한 경우 예방 조치를 취하십시오.

원본 파일을 유지해야하는 경우 먼저 백업해야합니다.

Mac 사용자를위한 참고 사항 :dos2unix명령은 Mac OS X에 존재하지 않습니다.

다른 도구를 사용하는 다양한 솔루션에 대해서는 이 답변확인하십시오 .


unix2dos반대로 하는 명령 도 있습니다 .

Unix 개행 문자를 수정하여 Windows 도구와 호환되도록합니다.

메모장에서 파일을 열고 모든 줄이 함께 실행되면을 시도하십시오 unix2dos filename.


이없는 사람들을 위해 DOS2UNIX가 설치 (그것을 설치하지 않음) :

\r이 오류를 일으키는 후행 문자를 제거하십시오 .

sed -i 's/\r$//' filename


설명 :

옵션 -i내부 편집을 위한 \r것이며 입력 파일에서 직접 후행을 삭제 합니다. 따라서 패턴을 올바르게 입력하도록주의하십시오.


들어 윈도우 와 사용자 메모장 ++ 이 옵션을 사용하여 특정 파일을 수정할 수 있습니다 (v6.8.3로 확인) - 편집 -> EOL 변환 -> 유닉스 / OSX 형식

그리고 파일을 다시 저장하십시오.

편집 : 여전히 v7.5.1에서 작동합니다 (Aug 29 2017)


cygwin과 Windows7을 사용하고 있습니다. 트릭은 set -o igncr.bashrc에 넣지 말고 SHELLOPTSWindows의 환경 변수에 전체 넣으십시오 . (따라서 유닉스 / cygwin에는 아무것도 없습니다 ...) .bashrc독일어로 말하듯이 "방울이 이미 빨려 있기 때문에" 작동하지 않는다고 생각합니다 . ;-) 그래서 내 SHELLOPTS모습은 이렇습니다

braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor

당신이 최근 Cygwin에서 (예 : 1.7)를 사용하는 경우, 당신은 또한 당신의 모두를 시작 .bashrc하고 .bash_profile다음 행으로, 첫 번째 비에 댓글을 선 :

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
(set -o igncr) 2>/dev/null && set -o igncr; # this comment is needed

이렇게하면 bash가 \rWindows 줄 구분 기호에 사용 된 캐리지 리턴 ( ) 문자 를 무시하게 됩니다.

http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html을 참조 하십시오 .


SUBLIME TEXT

숭고한 당신은 단지

보기-> 줄 끝-> (선택)

그런 다음 파일을 저장하십시오. 이 문제를 해결합니다.

그렇게 쉬워요!


-o igncrbash 호출에 옵션 추가 할 수도 있습니다. 예 :

bash -x -o igncr script.sh

오류:

'\r': 명령어를 찾을수 없음

쉘은 Windows와 같은 CRLF 줄 끝 ( 0d 0a)을 예상 LF( 0a) 인식 할 수 없기 때문에 발생합니다 .


힘내

Windows에서 Git을 사용하는 경우 설정 중에 '있는 그대로 체크 아웃 '을 선택했는지 확인하십시오 . 그런 다음 :을 실행 git config --global core.autocrlf false해야하므로 텍스트 파일을 체크 아웃하거나 커밋 할 때 Git이 변환을 수행하지 않습니다.


dos2unix

Git을 사용하지 않는다면, 다음과 같은 방법으로 영향을받는 파일 / 스크립트를 유닉스 계열 줄 끝 (LF)으로 다시 변환하면됩니다.

dos2unix ~/.bashrc

참고 :이 dos2unix명령은 dos2unix패키지의 일부입니다 .

Ex / Vim 편집기 + tr

Vim을 설치 한 경우 다음 명령으로 파일을 수정해야합니다.

ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*

유용한 별칭 : alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa".

tr

사용하는 방법은 다음과 같습니다 tr.

cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc

또는:

tr -d '\r' < filename > new_filename

참고 : \r는와 같습니다 \015.


sed

다음 명령을 시도 할 수 있습니다.

sed -i'.bak' s/\r//g ~/.bash*

recode

다음 별명이 유용 할 수 있습니다 ( dos2unix명령 을 대체 함 ).

alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'

출처 : Windows에서 무료 유닉스 도구 (SSH, bash는 등) .


perl

다음 perl명령은 파일을 DOS에서 Unix 형식으로 변환 할 수 있습니다.

perl -p -i.bak -e 's/\015//g' ~/.bash*

출처 : ^ M 제거 .


tofrodos

Linux에서 dos2unix또는로 기본 제공되지 않는 Ubuntu와 같이 패키지 ( )를 unix2dos설치 하고 다음 별명을 정의 할 수 있습니다 .tofrodossudo apt-get install tofrodos

alias dos2unix=’fromdos’
alias unix2dos=’todos’

그런 다음 위와 동일한 구문을 사용하십시오.


방랑자

Vagrant VM을 사용하고 있으며 프로비저닝 스크립트에서 발생하는 경우 binary옵션을 true다음으로 설정하십시오 .

# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html
config.vm.provision "shell" do |s|
  s.binary = true # Replace Windows line endings with Unix line endings.
  s.path = "script.sh"
end

Vagrant의 Windows CRLF 대 Unix LF 문제를 참조하십시오 .


다음 명령을 실행하십시오.

vim .bashrc
:set ff=unix
:wq!

요점 에 따라 해결책은 다음을 포함 하는 ~/.bash_profile( HOME디렉토리) 를 만드는 것 입니다.

export SHELLOPTS
set -o igncr

메모장 ++로 해결되었습니다.

1) 메뉴-> 편집-> EOL 변환-> 유닉스 / OSX 형식

2) 그런 다음 저장

결정된


notepad ++ (6.8.1)를 사용하여 쉘 스크립트를 Windows에서 Linux로 제공하는 사람들.

메모장에서 다음을 설정하십시오. ++ 편집-> EOL 변환-> Unix / OSX 형식


이 파일을 작성 / 업데이트하기 위해 notepad ++를 사용했을 수 있습니다.

EOL (편집-> EOL 변환) 기본적으로 변환은 Windows입니다.

메모장에서 EOL 변환 변경 ++

Edit -> EOL Conversion -> Unix (LF)

나는 같은 문제가 있었다. 해결책 : pspad 편집기로 파일을 편집하고 유닉스 형식을 지정하십시오 (메뉴-형식-> UNIX)

다른 편집기를 사용하여이 형식을 파일로 설정할 수 있다고 생각합니다


Emacs 사용자의 경우 :

  1. 파일을여십시오
  2. MX 세트 버퍼 파일-코딩 시스템
  3. "유닉스"를 선택하십시오

파일의 새 문자가 유닉스 스타일로 업데이트됩니다. Emacs의 "Newline Representation"에 대한 자세한 정보는 여기에서 찾을 수 있습니다.

http://ergoemacs.org/emacs/emacs_line_ending_char.html

참고 : 위의 단계는 명령 줄에서 실행하는 것을 선호하는 경우 Emacs 스크립트로 만들 수 있습니다.


에서 에디트 플러스 당신은에서 이렇게 Document → File Format (CR/LF) → Change File Format...메뉴를 누른 다음 선택 Unix / Mac OS X라디오 버튼을 누릅니다.


Windows 시스템에서 생성 / 다운로드 한 파일 / 스크립트로 인해 문제가 발생했을 수 있습니다. 리눅스 파일 형식으로 변환하십시오.

dos2unix ./script_name.sh

또는

dos2unix ~/.bashrc

1. 선택

EditorConfig EditorConfig — 나의 선택입니다.


2. 관련성

이 답변은 2018 년 3 월과 관련이 있습니다. 향후이 답변의 데이터는 더 이상 사용되지 않을 수 있습니다.

이 답변의 작성자는 2018 년 3 월에 개인적으로 EditorConfig를 사용했습니다.


3. 한계

지원되는 IDE / 편집기 중 하나 를 사용해야 합니다.


4. 논증

  1. 간단히 사용법. .editorconfig파일을 한 번 설정해야 프로젝트를 생성 할 수 있습니다. → 플랫폼, 스타일 및 IDE 관련 문제를 잊을 수 있습니다 .
  2. 플랫폼 간, 언어 간, IDE 간, 편집기 간 .

5. 예

5.1. 단순한

Sublime Text → Editor 편집기 플러그인 편집기를 설치 합니다 . Sublime Text에서 파일을 편집합니다.

예를 들어 sashacrlf.sh파일 있습니다.

echo "Sasha" &
echo "Goddess!" &

Cygwin에서이 파일을 실행합니다.

$ bash sashacrlf.sh
Sasha
sashacrlf.sh: line 1: $'\r': command not found
Goddess!

.editorconfig와 같은 프로젝트에서 파일 만듭니다 sashacrlf.sh.

[*.sh]
end_of_line = lf

즉, .sh편집기에서 프로젝트에 확장자가 있는 파일을 저장하면 EditorConfig가이 파일의 UNIX 줄 끝을 설정합니다.

sashacrlf.sh텍스트 편집기에 다시 저장 합니다. 나는 sashacrlf.sh다시 달렸다 :

$ bash sashacrlf.sh
Sasha
Goddess!

콘솔에서 예기치 않은 출력을 얻을 수 없습니다.

5.2. 여러 파일 확장자

예를 들어, 확장자 .sh.bashrc및 인 모든 파일에서 UNIX 줄 끝을 원합니다 .bash_profile. .editorconfig파일 에 다음 줄을 추가 합니다.

[*.{sh,bashrc,bash_profile}]
end_of_line = lf

내가 어떤을 가진 파일을 저장하면 지금 .sh, .bashrc또는 .bash_profile확장을, EditorConfig는 자동으로이 파일의 끝 UNIX 라인을 설정합니다.


6. 추가 링크


Cygwin 설치에 vim 패키지가 설치되어 있으면 vim을 사용하여 찾기 및 바꾸기없이이 문제를 해결할 수 있습니다. 다음과 같이 vim을 시작하십시오 vim filename.sh(종종 vi에도 별명이 지정됨). 그런 다음을 입력 :set fileformat=unix하고 :wq(쓰기 및 종료) 변경 내용을 저장하십시오. ( :vim의 편집 모드가됩니다.)

vim이 더 일반적으로 설치되기 때문에 dos2unix보다 이것을 권장합니다.

그러나 Unix / Linux 환경에서 사용하려는 파일을 Unix 텍스트 형식으로 저장하도록 텍스트 편집기를 설정하는 것이 가장 좋습니다. Notepad ++에 대한 위의 답변이 좋은 예입니다.

추가 사항 : 파일 형식 (DOS 또는 Unix)이 확실하지 않은 경우을 사용할 수 있습니다 file filename.sh. 이는 특히 Windows에서 제공되는 SQL 덤프를 가져올 때 인코딩 문제와 같이 더 모호한 문제를 디버깅하는 데 도움이 될 수 있습니다.

텍스트 파일 형식을 수정하는 방법에 대한 다른 옵션은 이 IU 기술 자료 문서를 참조하십시오.

Bash 스크립트 및 줄 끝에 대한 자세한 배경 정보는 이 StackOverflow 질문 에서 찾을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/11616835/r-command-not-found-bashrc-bash-profile


반응형