ANSI Color

From Wicked Cool Shell Scripts, 2nd Edition

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env bash

function initializeANSI () {

esc="\033" # 如果无效,直接敲 ESC 键。

# 前景色:
blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m"
yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m"
cyanf="${esc}[36m"; whitef="${esc}[37m"

# 背景色:
blackb="${esc}[40m"; redb="${esc}[41m"; greenb="${esc}[42m"
yellowb="${esc}[43m" blueb="${esc}[44m"; purpleb="${esc}[45m"
cyanb="${esc}[46m"; whiteb="${esc}[47m"

# 粗体、斜体、下划线以及样式切换:
boldon="${esc}[1m"; boldoff="${esc}[22m"
italicson="${esc}[3m"; italicsoff="${esc}[23m"
ulon="${esc}[4m"; uloff="${esc}[24m"
invon="${esc}[7m"; invoff="${esc}[27m"
reset="${esc}[0m"
}

initializeANSI
echo -e "
${yellowf}This is a phrase in yellow${redb} and red${reset}
${boldon}This is bold${ulon} this is italics${reset} bye-bye
${italicson}This is italics${italicsoff} and this is not
${ulon}This is ul${uloff} and this is not
${invon}This is inv${invoff} and this is not
${yellowf}${redb}Warning I ${yellowb}${redf}Warning II${reset}
"

Add snippets for shell common comment

1
2
3
4
5
6
7
8
9
10
11
{
"Print to shellNote": {
"prefix": "shell",
"body": [
" # Description: $1",
" # Author: Your Name",
" # Date: ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}"
],
"description": "shel script comment"
}
}

ls Invalid option

ls: invalid option – ‘j’

1
2
3
4
5
6
7
8
$ ls

0n5whdeZ0ow-download.jpg A-McbCSin6w-download.jpg G1vKK6L7Ep0-download.jpg .....
-jGGcAqIBms-download.jpg -pahtnAMuFo-download.jpg

$ ls *.jpg
ls: invalid option -- 'j'
Try 'ls --help' for more information.

这个简单的命令执行失败了,期望 shell 扩展 * 找出所有 jpg 图像,也没有传入 -j 作为 option 选项,很是奇怪,通过 bing 找到了答案,百度真的是不适合程序员…..

StackExchange ls invalid option 中的问题类似,原因是有个图像文件开头是 - (-jGGcAqIBms-download.jpg),被当作 ls 的 option 选项了….

man bash

A -- signals the end of options and disables further option processing. Any arguments after the – are treated as file‐ names and arguments. An argument of - is equivalent to –.

解决上述问题的办法:

  1. 使用 --
1
ls -- *.jpg
  1. 生产脚本使用 find + xargs,更保险
1
2
# -name选项指定了待查找文件名的模式。这个模式可以是通配符,也可以是正则表达式
find . -type f -name '*.jpg' -print0 | xargs -0 -n 1 command
  1. 修改文件名,避免此种情况发生
1
for img in $(find . -maxdepth 1 -type f  ! -iname 'unsplash*.jpg'); do new=unsplash_${img##*/}; sudo mv "$img" "$new"; done;

DateAndTime

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

java.util public class Date
extends Object
implements java.io.Serializable, Cloneable, Comparable<Date>

The class Date represents a specific instant in time, with millisecond precision.
Prior to JDK 1.1, the class Date had two additional functions.

It allowed the interpretation of dates as year, month, day, hour, minute, and second values. It also allowed the formatting and parsing of date strings. Unfortunately, the API for these functions was not amenable to internationalization.

As of JDK 1.1, the Calendar class should be used to convert between dates and time fields and the DateFormat class should be used to format and parse date strings. The corresponding methods in Date are deprecated.

Although the Date class is intended to reflect coordinated universal time (UTC), it may not do so exactly, depending on the host environment of the Java Virtual Machine. Nearly all modern operating systems assume that 1 day = 24 × 60 × 60 = 86400 seconds in all cases. In UTC, however, about once every year or two there is an extra second, called a "leap second."

The leap second is always added as the last second of the day, and always on December 31 or June 30. For example, the last minute of the year 1995 was 61 seconds long, thanks to an added leap second. Most computer clocks are not accurate enough to be able to reflect the leap-second distinction.

Some computer standards are defined in terms of Greenwich mean time (GMT), which is equivalent to universal time (UT). GMT is the "civil" name for the standard; UT is the "scientific" name for the same standard. The distinction between UTC and UT is that UTC is based on an atomic clock and UT is based on astronomical observations, which for all practical purposes is an invisibly fine hair to split. Because the earth's rotation is not uniform (it slows down and speeds up in complicated ways), UT does not always flow uniformly. Leap seconds are introduced as needed into UTC so as to keep UTC within 0.9 seconds of UT1, which is a version of UT with certain corrections applied. There are other time and date systems as well; for example, the time scale used by the satellite-based global positioning system (GPS) is synchronized to UTC but is not adjusted for leap seconds. An interesting source of further information is the U.S. Naval Observatory, particularly the Directorate of Time at:
http://tycho.usno.navy.mil

and their definitions of "Systems of Time" at:
http://tycho.usno.navy.mil/systime.html

In all methods of class Date that accept or return year, month, date, hours, minutes, and seconds values, the following representations are used:
A year y is represented by the integer y - 1900.
A month is represented by an integer from 0 to 11; 0 is January, 1 is February, and so forth; thus 11 is December.
A date (day of month) is represented by an integer from 1 to 31 in the usual manner.
An hour is represented by an integer from 0 to 23. Thus, the hour from midnight to 1 a.m. is hour 0, and the hour from noon to 1 p.m. is hour 12.
A minute is represented by an integer from 0 to 59 in the usual manner.
A second is represented by an integer from 0 to 61; the values 60 and 61 occur only for leap seconds and even then only in Java implementations that actually track leap seconds correctly. Because of the manner in which leap seconds are currently introduced, it is extremely unlikely that two leap seconds will occur in the same minute, but this specification follows the date and time conventions for ISO C.
In all cases, arguments given to methods for these purposes need not fall within the indicated ranges; for example, a date may be specified as January 32 and is interpreted as meaning February 1.
Since:
JDK1.0
See Also:
DateFormat, Calendar, TimeZone
< 1.8 >

TimeZoneMapping

1
2
3
4
5
6
7
useTimezone

Convert time/date types between client and server time zones (true/false, defaults to 'false')? This is part of the legacy date-time code, thus the property has an effect only when "useLegacyDatetimeCode=true."

Default: false

Since version: 3.0.2
1
2
3
4
5
6
7
useJDBCCompliantTimezoneShift

Should the driver use JDBC-compliant rules when converting TIME/TIMESTAMP/DATETIME values' time zone information for those JDBC arguments which take a java.util.Calendar argument? This is part of the legacy date-time code, thus the property has an effect only when "useLegacyDatetimeCode=true."

Default: false

Since version: 5.0.0