当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
帖子发表于 : 2008-10-18 14:20 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
一般来说,无论后台程序是否自己结束还是被kill都会在控制台上打印推出消息。(?)
--
但是我观察脚本《俄罗斯方块》,他有两个进程,一个在前台获得输入,一个在后台负责显示,无论是被C-c还是kill还是满足游戏结束条件,后台和前台程序都会结束,奇怪的事出来了,后台程序并没有打印退出消息,而是干净的退出了。

据查:它并没有使用重定向>。没有使用fg。stty也只用了2次,一次是获得当前tty设置,一次是重设tty。

---
它太长了,读了半天还不知道它是如何实现这个的!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
帖子发表于 : 2008-10-18 15:33 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
在sir看到一个想法,就实现一下。这个想法是:打印随机数,按任意键停止/再开始。
代码:
#!/bin/sh

RunAskey()
{
    Stty=`stty -g`
    trap "MyExit $1" INT TERM
    i=0
    while `read -s -n 1 a`;do
   if [ $i == 0 ];then
       kill -30 $1
       i=1
   else
       kill -31 $1
       i=0
   fi
    done
}

Random()
{
    n=1
    trap "n=0" 30
    trap "n=1" 31
    echo -n "Creating Random Number...     "
    while `sleep 1`;do
   if [ $n == 1 ];then
      echo -en \\b\\b\\b\\b\\b
      printf %5d $RANDOM
   else
       :
   fi
    done
}

MyExit()
{
    kill $1
    stty $Stty
    exit
}
if [ $# == 1 ]; then
    Random
else
    bash $0 -xx&
    RunAskey $!
fi


这个脚本90%完美,但就是退出时不完美,会打印退出消息。就有这个想法。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
帖子发表于 : 2008-10-18 15:58 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
我的怎么没有退出消息?
代码:
xiooli(~/桌面)╠♦ bash pt
Creating Random Number... 5743xiooli(~/桌面)╠☪


页首
 用户资料  
 
4 楼 
 文章标题 : Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
帖子发表于 : 2008-10-18 16:07 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
??
奇怪了?
你这么运行的啊!

用./pt试试。。

--
你这样运行我还是有!


你有改过么?

你有特被设置过bash吗?除了你的PS1外?


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
帖子发表于 : 2008-10-18 16:16 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
cnkilior 写道:
??
奇怪了?
你这么运行的啊!

用./pt试试。。

--
你这样运行我还是有!


你有改过么?

你有特被设置过bash吗?除了你的PS1外?

算啦,把bashrc贡献出来吧:
代码:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
export HISTCONTROL=ignoreboth

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ] && [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto'
    alias dir='ls --color=auto --format=vertical'
    alias vdir='ls --color=auto --format=long'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'

# user-defined aliases
#alias rm='rm -vi'
#alias cp='cp -vi'
#alias mv='mv -vi'
alias clean='rm -f "#"* "."*~ *~ *.dvi *.aux *.log'
alias clr='clear'
alias agi='sudo apt-get install'
alias acs='sudo apt-cache search'
alias mna='man'

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

#颜色代码

export back_green="\[\033[01;42m\]"
export back_blue="\[\033[01;44m\]"
export back_brown="\[\033[01;41m\]"
export back_purple="\[\033[01;45m\]"

export black="\[\033[0;38;5;0m\]"
export red="\[\033[0;38;5;1m\]"
export green="\[\033[0;38;5;2m\]"
export yellow="\[\033[0;38;5;3m\]"
export blue="\[\033[0;38;5;4m\]"
export magenta="\[\033[0;38;5;55m\]"
export cyan="\[\033[0;38;5;6m\]"
export white="\[\033[00m\]"
export coldblue="\[\033[0;38;5;33m\]"
export smoothblue="\[\033[0;38;5;111m\]"
export iceblue="\[\033[0;38;5;45m\]"
export turqoise="\[\033[0;38;5;50m\]"
export smoothgreen="\[\033[0;38;5;42m\]"

#自定义函数

x () {  #解压

   if [ -f $1 ] ; then
      case $1 in
         *.tar.bz2)   tar xjf $1      ;;
         *.tar.gz)   tar xzf $1      ;;
         *.bz2)      bunzip2 $1      ;;
         *.rar)      rar x $1      ;;
         *.gz)      gunzip $1      ;;
         *.tar)      tar xf $1      ;;
         *.tbz2)      tar xjf $1      ;;
         *.tgz)      tar xzf $1      ;;
         *.zip)      unzip $1      ;;
         *.Z)      uncompress $1   ;;
         "")      没有输入文件名!   ;;
         *)      echo "'$1' 不能通过 x 解压" ;;
      esac
   else
      echo "'$1' 不是有效文件!"
   fi

}

pre_prompt () {

    if [ ${changed:-0} -eq 0 ];then
        PS1="${back_green}\u${white}(\w)${back_green}╠♦${white} "
        changed=1
    else
        PS1="${back_brown}\u${white}(\w)${back_brown}╠☪${white} "
        changed=0
    fi
}

unset PROMPT_COMMAND
PROMPT_COMMAND=pre_prompt



#彩色man page

export BROWSER=export PAGER="/usr/bin/less -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\033[01;31m'
export LESS_TERMCAP_md=$'\033[01;31m'
export LESS_TERMCAP_me=$'\033[0m'
export LESS_TERMCAP_se=$'\033[0m'
export LESS_TERMCAP_so=$'\033[01;44m'
export LESS_TERMCAP_ue=$'\033[0m'
export LESS_TERMCAP_us=$'\033[01;32m'


页首
 用户资料  
 
6 楼 
 文章标题 : Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
帖子发表于 : 2008-10-18 16:28 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
没有什么特别之处(当然你的脚本很好),除了export,alias,定义函数,就是运行其他脚本,关键是这个“PROMPT_COMMAND=pre_prompt”是什么意思?PROMPT_COMMAND变量是干什么的?
我这里是默认的“PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'”

还有就是shopt -s checkwinsize


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译