当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 16:46 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
我现在有一个小小的脚本需求,就是调用终端后,进入指定的目录后(在弹出的终端中自动切换到指定的目录下),同时自动地在终端中显示目录中的文件列表。

为此,我如下编写,但是当把它保存为可执行的脚本后,用鼠标点击执行,发现并不能弹出终端,当然也就不能在弹出的终端中切换到指定目录,同时显示其文件列表了。请大家指点一下应该如何编写才能实现阿。

代码:
#!/bin/sh
set -e

BINDIR=/usr/local/toys

if [ $# -lt 1 ] ; then
  echo "系统自动切换到指定目录,当前目录下的文件或程序有:"
  cd ${BINDIR}
  ls ${BINDIR}
fi


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 17:00 

注册: 2008-11-01 21:42
帖子: 1028
地址: 树下板凳
送出感谢: 0 次
接收感谢: 1
gnome-terminal;cd /usr/local/toys;ls
没看到你调终端, 用bash吧,不要默认sh


_________________
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 18:19 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
调用终端使之弹出后,如何在弹出的终端中执行目录切换,并显示目录中的列表呢?

下面的代码

代码:
#!/bin/bash
set -e
BINDIR=/usr/local/toys
if [ $# -lt 1 ] ; then
  exec xterm;
  echo "系统自动切换到指定目录,当前目录下的文件或程序有:"
  cd ${BINDIR}
  ls ${BINDIR}
fi


终端可以弹出,但是cd 和ls命令不能在弹出的终端中执行并显示结果。请问,又该如何修改呢?


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 18:42 
头像

注册: 2007-12-25 12:51
帖子: 231
送出感谢: 0 次
接收感谢: 0 次
这个算不?
代码:
xterm -hold -e 'cd /opt;ls -l'


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 19:46 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
根据 cnc的提示,现修改的代码如下:

代码:
#!/bin/bash
set -e
BINDIR=/usr/local/toys
if [ $# -lt 1 ] ; then
  exec xterm -hold -e "cd '${BINDIR}';ls";
  echo "系统自动切换到指定程序目录,您可直接键入下列命令执行数据分析:"
exit 1
fi


这个代码现在可在弹出的终端中,执行进入目录和显示指目录中的文件列表这两项功能,但是不能在弹出的终端中执行echo语句。echo语句在我的设计中是需要的,因为它可在弹出终端显示必要的提示信息,便于进一步的操作。

下一步该如何修改呢?

而且,设计中还有一项功能,即执行上述功能后,能在该弹出终端中回退到命令提示符下,以便能根据和提示信息和显示结果,即刻在该弹出终端中输入相关命令,执行新的命令。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 20:14 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
全都放到 xterm 的 -e 参数后面。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 21:14 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
现在修改代码如下:

代码:
#!/bin/bash
set -e
BINDIR=/usr/local/toys
if [ $# -lt 1 ] ; then
  exec xterm -hold -e 'cd ${BINDIR};
  echo "关于bioldex,您可以终端中键入下列命令进行了解和使用:";
  ls';
  exit 1
fi


现在echo语句可以了,不过在xterm下,这些汉字显示不全。而且这个代码不能使弹出的终端回退到命令提示符下。

如何优化和修改代码呢?


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-14 23:44 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
试试把 xterm 改为 urxvt(需安装相应的软件包)。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-15 6:22 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
看看下面这个能命中楼主的需求吗
代码:
gnome-terminal --working-directory $BINDIR -x sh -c "echo 关于bioldex,您可以终端中键入下列命令进行了解和使用:; ls; exec bash"


另一个做法是这样:
代码:
cat > ~/.bioldexrc <<!
. ~/.bashrc
BINDIR=/usr/local/toys
cd $BINDIR
echo "关于bioldex,您可以终端中键入下列命令进行了解和使用:"
ls
!

gnome-terminal -x bash --rcfile ~/.bioldexrc


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-15 9:28 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
感谢提示,现在修改的代码如下,基本满足要求,但光标不会闪动,而且需要解决汉字的显示问题:
代码:
#!/bin/bash
set -e
BINDIR=/usr/local/toys
if [ $# -lt 1 ] ; then
cd ${BINDIR}
  exec xterm -hold -e 'echo "系统自动切换到指定程序目录,您可直接键入下列命令进行使用和了解";
  ls;
  exec bash;'
fi


不过,上述代码中的xterm如果修改为gnome-terminal或xfce4-terminal,那么就不能弹出终端。不知为何?

另外,如果使用
代码:
#!/bin/bash
cat > ~/.bioldexrc <<!
. ~/.bashrc
BINDIR=/usr/local/toys
cd $BINDIR
echo "关于bioldex,您可以终端中键入下列命令进行了解和使用:"
ls
!
xfce4-terminal -x bash --rcfile ~/.bioldexrc


一方面,弹出终端不能显示指定目录中的文件列表,另一方面也不能自动切换到指定目录。


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-15 10:07 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
现在得到的结果,下面的命令代码,可以较好地满足要求:

代码:
#!/bin/bash
BINDIR=/usr/local/toys
TEXT="关于bioldex,您可以终端中键入下列命令进行了解和使用"
cd $BINDIR
xfce4-terminal --working-directory $BINDIR -x sh -c "echo $TEXT;
                                                     ls;
                                                     exec bash"


不过,弹出的终端窗口大小不能根据显示的内容进行自动调整。如果要使弹出的终端窗口能自动调整大小,该加上什么代码呢?


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-15 12:17 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
引用:
不过,上述代码中的xterm如果修改为gnome-terminal或xfce4-terminal,那么就不能弹出终端。不知为何?

gnome-terminal 中要执行一条命令,如果命令中还带参数,那么用 -x 参数,用 -e 参数就会有问题。另外,gnome-terminal 不支持 -hold,其实,因为你最后要进入交互式的 bash,没必要加 -hold。
那个 --rcfile 的例子,我是试过的,没有问题。但我用的是 gnome-terminal,我不想再装个 xfce4-terminal 试了,如果你对这个用法感兴趣,就不要盲目照搬,先看看 man,它们支持的参数是不是一样。
引用:
不过,弹出的终端窗口大小不能根据显示的内容进行自动调整。如果要使弹出的终端窗口能自动调整大小,该加上什么代码呢?

根据哪个显示内容呢?如果是 ls 的结果,ls 命令本身会根据窗口大小来调整输出,因而没有必要调整宽度吧。如果说 echo 的输出,完全可以事先计算出窗口宽度。至于窗口高度,既然还要交互式地执行用户的命令,没必要弄得太小,而太大也可能不好看,所以就弄个看着舒服的值就行了,只要有滚动条,什么都好办。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-15 12:21 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
窗口,看-geometry参数。--help看
xterm看man


_________________
● 鸣学


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 请问如何编写shell脚本调用终端呢?
帖子发表于 : 2009-09-17 8:32 

注册: 2009-09-14 16:32
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
呵呵,谢谢很好的提示,很好地帮了我一把。看来,Linux下需要好好把玩才行。


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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