一般来说,无论后台程序是否自己结束还是被kill都会在控制台上打印推出消息。(?)
--
但是我观察脚本《俄罗斯方块》,他有两个进程,一个在前台获得输入,一个在后台负责显示,无论是被C-c还是kill还是满足游戏结束条件,后台和前台程序都会结束,奇怪的事出来了,后台程序并没有打印退出消息,而是干净的退出了。
据查:它并没有使用重定向>。没有使用fg。stty也只用了2次,一次是获得当前tty设置,一次是重设tty。
---
它太长了,读了半天还不知道它是如何实现这个的!
[问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
在sir看到一个想法,就实现一下。这个想法是:打印随机数,按任意键停止/再开始。
这个脚本90%完美,但就是退出时不完美,会打印退出消息。就有这个想法。
代码: 全选
#!/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
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
我的怎么没有退出消息?
代码: 全选
xiooli(~/桌面)╠♦ bash pt
Creating Random Number... 5743xiooli(~/桌面)╠☪
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
??
奇怪了?
你这么运行的啊!
用./pt试试。。
--
你这样运行我还是有!
你有改过么?
你有特被设置过bash吗?除了你的PS1外?
奇怪了?
你这么运行的啊!
用./pt试试。。
--
你这样运行我还是有!
你有改过么?
你有特被设置过bash吗?除了你的PS1外?
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
算啦,把bashrc贡献出来吧:cnkilior 写了:??
奇怪了?
你这么运行的啊!
用./pt试试。。
--
你这样运行我还是有!
你有改过么?
你有特被设置过bash吗?除了你的PS1外?
代码: 全选
# ~/.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'
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: [问题]如何让一个后台程序(脚本)在其退出后不打印退出消息?
没有什么特别之处(当然你的脚本很好),除了export,alias,定义函数,就是运行其他脚本,关键是这个“PROMPT_COMMAND=pre_prompt”是什么意思?PROMPT_COMMAND变量是干什么的?
我这里是默认的“PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'”
还有就是shopt -s checkwinsize
我这里是默认的“PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'”
还有就是shopt -s checkwinsize