jcurl
function jcurl {; curl ${@} | python3 -c 'from json import loads as l; from pprint import pprint as p; from sys import stdin as s; p(l(s.read()));' | highlight --syntax py -O ansi | sed s/'\(\x1b\[00;\)3\(.m\)'/'\19\2'/g };
function jcurl {
curl ${@} \
| python3 -c 'from json import loads as l; from pprint import pprint as p; from sys import stdin as s; p(l(s.read()));' \
| highlight --syntax py -O ansi \
| sed s/'\(\x1b\[00;\)3\(.m\)'/'\19\2'/g \
| dd
}
function jcurl {; curl ${@} | python3 -c 'from json import loads as l; from pprint import pprint as p; from sys import stdin as s; p(l(s.read()));' | highlight --syntax py -O ansi | sed s/'\(\x1b\[00;\)3\(.m\)'/'\19\2'/g };
优点
调用pprint模块 高度定制
缺点
- pprint不能输出json格式, 仅用于终端显示.
- highlight需要额外安装
- * sed的语法不友好
PS1 美化终端
PS1='\n\[\e[31;1m\]#\[\e[0m\] \[\e[32;1m\]\u\[\e[0m\]@\[\e[34;1m\]\h\[\e[0m\]:\[\e[33;1m\]\w\[\e[0m\] \[\e[35;1m\]\D{%Y-%m-%d %H:%M:%S}\[\e[0m\]\n\[\e[31;1m\]+\[\e[0m\]
简化版
PS1='\[\e[35;1m\]\D{%H:%M:%S}\[\e[0m\] \[\e[32;1m\]\u\[\e[0m\]@\[\e[34;1m\]\h\[\e[0m\]:\[\e[33;1m\]\W\[\e[0m\] \[\e[31;1m\]\$\[\e[0m\] '
bash 的 for/while/until 循环
写法1 换行
windows编辑的文件\n\r结尾必须替换掉\r!!!
for item in sequence
do
binary --key=value
binary --key=value
done
写法2 一行
do 和第一条语句之间没有分号!!!
结尾分号不能省!!!
for item in sequence; do binary --key=value; binary --key=value; done;
while
while [ test_expression_true ]; do binary; done;
while test_return_value; do binary; done;
until
until [ test_expression_true ]; do binary; done;
until test_return_value; do binary; done;
bash 的 case
实际上, bash中一切变量都是字符串, 包括bash的一维数组. 如果不以bash一维数组的特殊语法引用变量, 那么将得到整个数组的字符串
case variable in
pattern)
binary
pattern)
binary
;; # 相当于break
pattern|pattern|pattern)
binary # |相当于或
;;
pattern)
binary
;;
*)
binary # default
;;
esac
花括号扩展
Bash 允许你使用花括号扩展字符或数字序列。例如,echo file{1..3}.txt
将输出 file1.txt file2.txt file3.txt
。
当然,我很乐意分享一些高级的 Bash 技巧!
- 使用 $( ) 或
您可能已经了解了 $( ) 语法进行命令替换。但是您是否知道您也可以使用反引号
例如:
echo "今天是 $(date +%A)"
echo "明天是 `date -d '+1 day' +%A`"
这两个命令都将输出星期几,第一个使用 $( ) 语法,第二个使用
语法。
- 数组操作:
Bash 还支持数组,这对于组织数据非常有用。您可以使用语法my_array=(element1 element2 element3)
声明一个数组。您可以使用语法my_array[index]
访问数组元素。
例如:
my_array=(apple banana cherry)
echo ${my_array[0]}
echo ${my_array[@]}
# 提示, for ele in my_array 效果相同
- 进程替换:
进程替换允许您将命令的输出视为文件。您可以使用语法<(command)
将命令的输出作为文件传递给另一个命令。
diff <(ls /tmp) <(ls /var/tmp)