Bash

如何從 Sugar on a Stick 中的終端提示中刪除返回碼?

  • August 8, 2018

我在 i686 上使用Sugar on a Stick (Fedora 23) 0.106 作為發行版。

當我使用終端時,我得到了一個非常奇怪的行為。

奇怪的程式碼

例如,當我鍵入時,ls我得到環境變數的值在]777;notify;Command completed;ls[sugar] #哪裡。[sugar] #``PS1

我的.bashrc樣子是這樣的:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
   . /etc/bashrc
fi

# Prompt
PS1="[sugar] # "

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

當我註釋掉該Source global definitions部分時,問題就消失了。但是,當我想修改時,/etc/bashrc我讀到修改這個文件是不明智的。這是文件:

# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

# are we an interactive shell?
if [ "$PS1" ]; then
 if [ -z "$PROMPT_COMMAND" ]; then
   case $TERM in
   xterm*|vte*)
     if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
         PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
     elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
         PROMPT_COMMAND="__vte_prompt_command"
     else
         PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
     fi
     ;;
   screen*)
     if [ -e /etc/sysconfig/bash-prompt-screen ]; then
         PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
     else
         PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
     fi
     ;;
   *)
     [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
     ;;
   esac
 fi
 # Turn on parallel history
 shopt -s histappend
 history -a
 # Turn on checkwinsize
 shopt -s checkwinsize
 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
 # You might want to have e.g. tty in prompt (e.g. more virtual machines)
 # and console windows
 # If you want to do so, just add e.g.
 # if [ "$PS1" ]; then
 #   PS1="[\u@\h:\l \W]\\$ "
 # fi
 # to your custom modification shell script in /etc/profile.d/ directory
fi

if ! shopt -q login_shell ; then # We're not a login shell
   # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
   pathmunge () {
       case ":${PATH}:" in
           *:"$1":*)
               ;;
           *)
               if [ "$2" = "after" ] ; then
                   PATH=$PATH:$1
               else
                   PATH=$1:$PATH
               fi
       esac
   }

   # By default, we want umask to get set. This sets it for non-login shell.
   # Current threshold for system reserved uid/gids is 200
   # You could check uidgid reservation validity in
   # /usr/share/doc/setup-*/uidgid file
   if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
      umask 002
   else
      umask 022
   fi

   SHELL=/bin/bash
   # Only display echos from profile.d scripts if we are no login shell
   # and interactive - otherwise just process them to set envvars
   for i in /etc/profile.d/*.sh; do
       if [ -r "$i" ]; then
           if [ "$PS1" ]; then
               . "$i"
           else
               . "$i" >/dev/null
           fi
       fi
   done

   unset i
   unset -f pathmunge
fi
# vim:ts=4:sw=4

我能做些什麼呢?

除了PS1環境變數,PROMPT_COMMAND環境變數也會影響你的提示。從 bash 手冊頁:

如果設置,則在發出每個主要提示之前將該值作為命令執行

正是該命令將不需要的內容添加到您的提示符中。您可以通過取消設置 .bashrc 中的變數來停止該行為:

unset PROMPT_COMMAND

如圖所示註釋字元串

須藤 vim /etc/profile.d/vte.sh
...
_vte_prompt_command() {
...
#printf "\033]777;notify;命令完成;%s\007\033]0;%s@%s:%s\007%s" "${command}" "${USER}" "${主機名%%.*}" "${pwd}" "$(__vte_osc7)"
}

引用自:https://unix.stackexchange.com/questions/244994