Ls
在 tcsh 中使用人類可讀的腳本設置 LS 顏色
我有一個 shell 腳本 (
set_up_my_ls_colors.sh
),如果我從我的 shell 呼叫,它會為ls
. 該腳本的好處是它允許我以人類可讀的格式配置顏色。該文件在 zsh 和 bash 下執行良好,但在tcsh
.如果我稱它為:
. ~/.set_up_my_ls_colors.sh
我得到:
.: Permission denied
即使該文件具有
u+x
權限。我也試過
/bin/tcsh ~/.set_up_ls_colors.sh
返回
Illegal variable name
以下是有
set_up_my_ls_colors.sh
問題的文件:# Call this script as . ~/path_to_this_file.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 ") #echo GOT: $LS_COLORS #export LS_COLORS # The codes are: # code 0 = default colour # code 1 = bold # code 4 = underlined # code 5 = flashing text # code 6 = no change # code 7 = reverse field # code 8 = black # code 9 = strikethrough (cool!) # code 10 - 29= no change # code 30 = light green # code 31 = red # code 32 = green # code 33 = orange # code 34 = blue # code 35 = purple # code 36 = cyan # code 37 = grey # code 38 = underline # code 39 = no change # code 40 = black background # code 41 = red background # code 42 = green background # code 43 = orange background # code 44 = blue background # code 45 = purple background # code 46 = cyan background # code 47 = grey background # code 90 = dark grey # code 91 = light red # code 92 = light green # code 93 = yellow # code 94 = light blue # code 95 = light purple # code 96 = turquoise # code 100 = dark grey background # code 101 = light red background # code 102 = light green background # code 103 = yellow background # code 104 = light blue background # code 105 = light purple background # code 106 = turquoise background
它不起作用有幾個原因:
要將腳本作為執行檔執行,第一行必須告訴 shell 哪個程序(即哪個 shell)應該執行腳本,所以你應該開始:
#!/bin/bash
或您想要的任何外殼(但請參閱下面的註釋)。
其次,您不能在 tcsh 中執行它,因為它使用不同的語法。你沒有
export
環境變數,你使用setenv
沒有等號。此外,$(command) 對 tcsh 沒有任何意義。但是另一個問題是,如果您從不同的 shell 執行此腳本,則其中設置的變數在它完成時不會被帶回:當您執行
. ./script.sh
它時,它會通過目前執行的 shell 執行腳本。您最好的解決方案是有兩個版本,一個是這種格式,一個是與 tcsh 一起工作的版本,並將它們放在您的啟動腳本中,即 ~/.bashrc 或 ~/.tcshrc。
tcsh 的語法與 sh 的語法不兼容。
如果您的登錄 shell 是 sh 並且您只以互動方式使用 tcsh,
LS_COLORS
請在您的~/.profile
.如果你有 (t)csh 作為你的登錄 shell,你可以執行你的腳本,列印出 csh 的值
LS_COLORS
並將其設置在 csh 中(大概在你的~/.login
.setenv LS_COLORS `sh -c '. ~/path/to/file.sh; echo "$LS_COLORS"'`