На самом деле причина этого состоит в том, что udev конкретно устанавливает полномочия на 0620 на tty устройствах, и su не изменяет или владение или полномочия, ни если он. По моему мнению, это оставляет нас в ситуации, которая делает/dev/std* непортативным.
Простое решение состоит в том, чтобы поместить "mesg y" в/etc/profile (или безотносительно высокоуровневого профиля, который Вам нравится использовать), поскольку это изменяет полномочия Вашего tty устройства к 0622. Мне действительно не нравится это, но это, вероятно, лучше, чем изменение правил udev.
Мне тоже нужна была эта функция. Я практически все слил в этот .tmux.conf
# cat <<__DATA__ >/dev/null
# Embed shell scripts
set -g status-utf8 on
set -g utf8 on
set -g default-terminal "screen-256color"
run "cut -c3- ~/.tmux.conf | bash -s apply_configuration"
# __DATA__
#
# apply_configuration() {
# tmux set -g status-bg colour$(hash_string256 $(hostname))
# }
# hash_string256() {
# hash_value=$(printf "%s" "$1" | md5sum | sed -e 's/[^[:alnum:]]\+//g' | tr "a-f" "A-F")
# if [ "x" != "x$2" ]
# then
# v2="+ $2"
# fi
# echo "$(((0x$hash_value $v2) % 255))" | tr -d "-"
# }
#
# $1
, который я удалил, используя bc
, потому что у меня его не было в моем git-bash. Таким образом, я хотел, чтобы он работал как в моих Linux-системах, так и в Windows с cygwin, не добавляя лишних вещей.
Я придумал следующую функцию оболочки:
hash_string256() {
# Hash $1 into a number
hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
# Add the hash with $2 and modulo 256 the result
# if $2 == "" it is 0
printf "ibase=16; (%s + %X) %% 100\n" $hash_value "$2" | bc
}
Эту функцию можно использовать следующим образом (результаты верны, если $ HOST
равно LOL
):
$hash_string256 $HOST
113
$hash_string256 $HOST 127
240
Чтобы связав его с tmux
, вы можете использовать сценарий, который запускает и настраивает tmux
.
#!/bin/sh
SESSION=$USER
hash_string256() {
hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
printf "ibase=16; (%s + %X) %% 100 \n" $hash_value "$2" | bc
}
tmux -2 new-session -d -s $SESSION
tmux set -g status-fg colour$(hash_string256 $HOST)
tmux set -g status-bg colour$(hash_string256 $HOST 127)
# Attach to session
tmux -2 attach-session -t $SESSION
Для имени хоста LOL
он установит status-fg
на colour113
и status-bg
на colour240
. Число 127 в $ (hash_string256 $ HOST 127)
присутствует, поэтому фон будет не таким же, как цвет переднего плана, и далеко друг от друга.
Если ваша система имеет md5
вместо md5sum
, строку
hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
можно заменить на
hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")