![脚本失败并显示“未找到命令:^M”](https://linux22.com/image/5148/%E8%84%9A%E6%9C%AC%E5%A4%B1%E8%B4%A5%E5%B9%B6%E6%98%BE%E7%A4%BA%E2%80%9C%E6%9C%AA%E6%89%BE%E5%88%B0%E5%91%BD%E4%BB%A4%EF%BC%9A%5EM%E2%80%9D.png)
当我尝试在 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
您的 shell 脚本是 DOS/Windows 文本格式(使用 CR+LF)。将其转换为Unix 格式(例如使用dos2unix)。
但这不会按您想要的方式工作,如链接问题中所述。执行一个新的 shell,并设置它所设置的变量,然后 shell 结束,并带走该变量。
如果您有一个脚本使用与您正在运行的脚本相同的 shell(或具有兼容的语法),那么您可以使用.
或来执行该脚本source
。这样,脚本的运行就好像您自己键入了所有内容一样,因此所有变量都保留下来(并且它将忽略 #! 行)。