标签 Shell 下的文章

知道了也没什么用的小知识:终端标题与转义序列

起因

事情的起因是这样的,我在 archlinux (以下简称 arch) 下的端模拟器(以下简称终端)使用 set -x 来调试,发现每次按回车都会一条类似下面这样的输出:

++ printf '\033]0;%s@%s:%s\007' nanpuyue arch '~'

然后我手动执行了这条命令也看不到任何输出和变化,着实令人费解。

OSC 转义序列

一番查找过后在 /etc/bash.bashrc 中找到了源头:

case ${TERM} in
  xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
    PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'

    ;;
  screen*)
    PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
    ;;
esac

- 阅读剩余部分 -

Bash 实现子网掩码与前缀长度互转

前缀长度转换为子网掩码

脚本: prefix_to_mask.sh

#!/bin/bash
# date: 2018-03-03
# license: GPLv3 https://www.gnu.org/licenses/gpl-3.0.txt
# author: nanpuyue <nanpuyue@gmail.com> https://blog.nanpuyue.com

num=$((4294967296 - 2**(32-$1)))
for i in {3..0};do
    echo -n $((num / 256**i))
    num=$((num % 256**i))
    (($i == 0)) && echo || echo -n .
done

这段脚本完全使用 Bash 内置函数实现,不调用外部进程。

子网掩码转换为前缀长度

脚本: mask_to_prefix.sh

- 阅读剩余部分 -