Shell
腳本因“找不到命令:^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 ")
您的 shell 腳本是 DOS/Windows 文本格式(使用 CR+LF)。將其轉換為 Unix 格式(例如使用 dos2unix)。
正如鍊接問題中所解釋的,這不會像你想要的那樣工作。一個新的 shell 被執行,它設置的變數,然後 shell 結束,帶著變數。
如果您的腳本與您正在執行的腳本使用相同的 shell(或具有兼容的語法),那麼您可以使用
.
或執行該腳本source
。這樣,腳本的執行就像您自己輸入了所有內容一樣,因此所有變數都保留(並且它將忽略 #! 行)。