我正在尝试在CentOS 4.1上使用bashdb(不幸的是,我不能选择其他/较新的OS)。
我安装了bash 4.2,然后安装了bashdb 4.2-0.8。从配置,制造,检查或安装开始,您不会有任何抱怨:一切看上去都像桃子一样。
但是尝试将bashdb用作'bash --debugger myscript'或'bashdb myscript'总是会出现此错误:
[bot@sjbld1 bin]$ bashdb -- putxen.sh
bash debugger, bashdb, release 4.2-0.8
Copyright 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Rocky Bernstein
This is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
/usr/local/share/bashdb/lib/setshow.sh: line 91: /dev/pts/2: Permission denied
/usr/local/share/bashdb/lib/setshow.sh: line 91: /dev/pts/2: Permission denied
/usr/local/share/bashdb/lib/setshow.sh: line 91: /dev/pts/2: Permission denied
/usr/local/share/bashdb/lib/setshow.sh: line 91: /dev/pts/2: Permission denied
[bot@sjbld1 bin]$
setshow.sh中没有第91行,目录/ dev中也没有/ dev / pts。
任何建议如何进行将不胜感激。我正在处理一堆破烂的shell脚本,而且我对bash(或Linux)并不热衷,并且希望比set -x和echo语句进行更紧密的调试。
谢谢
为了完整起见,我应该按照konsolebox的要求添加我试图用作bashdb测试的bash脚本,尽管任何代码都会出现“权限被拒绝”问题,并且可以通过使用Red Cricket建议的sudo来解决。这是脚本:
[bot@sjcpbrvpxbld1 bin]$ cat putxen.sh
if [ x$1 == x ]
then
echo must have filename as parameter
exit 1
fi
if [ -e $1 ]
then
echo $1 found
else
echo cannot find ./$1
exit 1
fi
FTPTGT=10.10.10.25
DIRTGT=xva
echo ftp upload file to $DIRTGT directory on $FTPTGT
ftp -n $FTPTGT <<EOF
user anonymous pass
hash
bin
cd $DIRTGT
put "$1"
bye
最佳答案
由于程序经常将stdout和stderr重定向,因此bashdb会尝试将其输出写入tty,除非另有指示;否则,除非另有说明。 bashdb确定运行tty
命令的控制台。
通常,您不需要以root用户身份运行bashdb。但是由于这里的一个谜,您运行bashdb的用户无法写入已注册的tty。那是:
echo hi > $(tty)
可能会给您同样的“权限被拒绝”。
ls -l $(tty)
可能会告诉您其中的内容。但是,如注释中所建议的那样,您可以通过以root身份运行(例如通过sudo)来解决此问题:
sudo bashdb -- putxen.sh
另一个解决方法是将您的用户添加到组中,例如运行
ls -l $(tty)
时列出的tty。