0

我正在尝试在 CentOS 4.1 上使用 bashdb(不幸的是我无法选择不同/更新的操作系统)。我安装了 bash 4.2 然后 bashdb 4.2-0.8。没有来自 configure、make、make 检查或 make install 的抱怨:一切看起来都很好。

但是尝试将 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
4

1 回答 1

0

由于程序通常会重定向 stdout 和 stderr,因此 bashdb 会尝试将其输出写入 tty,除非另有指示;bashdb确定运行tty命令的控制台。

通常您不需要以 root 身份运行bashdb。但是由于这里是一个谜的原因,您正在运行bashdb的用户无法写入注册到它的 tty。那是:

 echo hi > $(tty)

可能会给你同样的“权限被拒绝”。可能ls -l $(tty)会告诉你那里有什么。

但是,正如评论中所建议的,您可以通过以 root 身份运行(例如通过 sudo)来解决此问题:例如

sudo bashdb --  putxen.sh

另一种解决方法是将您的用户添加到组中,例如运行时列出的ttyls -l $(tty)

于 2015-10-22T23:21:25.830 回答