"명령을 찾을 수 없음: ^M"으로 인해 스크립트가 실패합니다.

"명령을 찾을 수 없음: ^M"으로 인해 스크립트가 실패합니다.

명령을 통해 zsh에서 다음 스크립트를 실행하려고 하면 /bin/zsh ~/.set_color_scheme.sh다음 오류가 발생합니다.

command not found: ^M

스크립트에는 u+x권한이 있으며 zsh도 있는 다른 시스템에서 실행하는 데 사용되었습니다. 어떤 단서가 있나요?

노트:이 질문은 다음과 관련이 있습니다.이것은 또 다른 질문입니다(스크립트를 조정하려고합니다 tcsh)

#!/bin/zsh
# Contents of set_color_scheme.sh

export LS_COLORS=$( \
( grep '\w' | grep -v '^#' | sed 's/#.\+//' | perl -lane 'printf "%s=%s:", shift @F, join ";", @F;' ) <<< "

# HUMAN_FORMATTED_DATA
# list one per line

# these are basic filesystem items
no 00          # normal
fi 00          # file
di 01 34       # directory
ln 00 36       # link
pi 40 33       # pipe
so 00 35       #
bd 40 33 01
cd 40 33 01
or 01 05 37 41
mi 01 05 37 41
ex 00 91       # executable
ow 01 34       # other writables


*.cmd 00 32
*.exe 00 32

# archive, compressed things etc
*.gz  00 90
*.bz2 00 90
*.bz  00 90
*.tz  00 90
*.rpm 00 90
*.rar 00 90
*.zip 00 90
*.iso 00 90


*.cpio 00 31



# perl & CODE
*.c      33
*.h      33
*.sh     33
*.t      33
*.pm     33
*.pl     33
*.cgi    33
*.pod    33
*.PL     33
*.js     33
*.php    33
#*.xs

# strikethrough
*.off 00 9
*.bak 00 9
*.old 00 9


# documents misc, html webstuff
# really TEXT
*.htm    94
*.html   94
*.txt    94
*.text   94
*.css    94


# MOVIE
*.avi    96
*.wmv    96
*.mpeg   96
*.mpg    96
*.mov    96
*.AVI    96
*.WMV    96
*.mkv    96

# images & pdf
*.jpg    96
*.jpeg   96
*.png    96
*.xcf    96
*.JPG    96
*.gif    96
*.svg    96
*.eps 00 96
*.pdf 00 96
*.PDF 00 96
*.ps  00 96

*.ai  00 91 # adobe ill
*.doc 00 91 # msword 

# data, such as .db, .csv
*.csv    95
*.dsv    95
*.db     95
*.sql    95
*.meta   95
# CONFS
*.xml    95
*.yaml   95
*.yml    95
*.conf   95
# [a-z0-9]*rc
")

답변1

쉘 스크립트는 DOS/Windows 텍스트 형식입니다(CR+LF 사용). Unix 형식으로 변환합니다(예: dos2unix 사용).

그러나 연결된 질문에 명시된 대로 원하는 방식으로 작동하지 않습니다. 새 셸을 실행하고 설정된 변수를 설정한 다음 변수를 가져오면서 셸이 종료됩니다.

실행 중인 스크립트와 동일한 셸을 사용하는(또는 호환 가능한 구문이 있는) 스크립트가 있는 경우 .또는 를 사용하여 스크립트를 실행할 수 있습니다 source. 이렇게 하면 모든 것을 직접 입력한 것처럼 스크립트가 실행되므로 모든 변수가 보존됩니다(그리고 #! 행은 무시됩니다).

관련 정보