Команда чтения удаляет двойной пробел и оставляет только один

В w3mможно отключить цвета с помощью параметра -o color=falseили-M(монохромного режима отображения ). Кажется trueявляется настройкой по умолчанию ?

$ w3m -show-option | grep color
    -o color=                     Display with color
    -o basic_color=              Color of normal character
    -o anchor_color=             Color of anchor
    -o image_color=              Color of image link
    -o form_color=               Color of form
    -o mark_color=               Color of mark
    -o bg_color=                 Color of background
    -o active_style=              Enable coloring of active link
    -o active_color=             Color of currently active link
    -o visited_anchor=            Use visited link color
    -o visited_color=            Color of visited link

В Debian /etc/skel/.bashrcесть несколько строк, управляющих цветом в зависимости от TERM,force_color_prompt(color_prompt)и наличия /usr/bin/dircolors. Вероятно, у вас есть что-то подобное в вашей системе.

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

Экспорт TERM=xterm-monoи удаление приведенных выше строк работает, за исключением цветов в w3m.

0
27.04.2021, 13:26
1 ответ

Read command removes double space and Keeps only one

Нет. Команда readсама по себе сохраняет внутренние пробелы как есть (, однако она будет обрезать начальные и конечные пробелы, если вы не установите IFSпустым; он также искажает обратную косую черту, если вы не используете-r).

read myVar <<<'Apr  4'
echo "$myVar"  # will output: Apr  4

Это вы потом теряете пробелы из-за того, что не удваиваете -цитирование переменных:

myVar2='Apr  4'
echo $myVar2  # will mangle spaces, please always use "$myVar2" instead

Неправильное заключение переменных в кавычки не только приводит к некорректной работе сценария, но и может представлять потенциальную угрозу безопасности.

Немного правильнее будет команда

ssh -qt remote-user-name@xxx.xxx.xxx.xxx "sed -i 's/oldlogsdate=.*/oldlogsdate=\"$oldlogsdate\"/' ~/.bash_profile"

Но это не универсально и в любом случае небезопасно, потому что не учитывает, что значение $oldlogsdateпотенциально может содержать не только пробелы, но и апострофы, косые черты, обратные косые черты, знаки доллара и восклицательные знаки.

2
28.04.2021, 22:51

Теги

Похожие вопросы