[在线等]在红帽Linux桌面执行sh脚本的3个问题!

tdy218 2009-05-29 10:22:41
问题1:双击桌面上的sh脚本程序,弹出的窗口中,"在终端运行"和"运行"除了前者一闪而过,后者在后台执行这个脚本的表面上的区别外,还有什么本质上的区别?


问题2:要想在桌面上双击(选择"在终端运行"和"运行"皆可)执行一个脚本,不能将路径用变量来代替,但对于路径特别长或者多处使用一个相同的一个长路径想用变量来代替,怎么办?
情况一,start.sh这样写:
[code=Shell Script]
#!/bin/sh
top="/opt/install/Tomcat6.0.18"
suffix=$(date +%y%m%d_%H%M%S)
nohup sh ${top}/bin/startup.sh >> ${top}/std_log/Server_Name.out@${suffix} &
[/code]

将它放在桌面上,双击(选择"在终端运行"和"运行"皆可)执行是失败的!会在指定的位置写文件Server_Name.out@20090529,但是长度为0,也没有java那个进程,也就是启动失败!
情况二,start.sh这样写:
[code=Shell Script]
#!/bin/sh
suffix=$(date +%y%m%d_%H%M%S)
nohup sh /opt/install/Tomcat6.0.18/bin/startup.sh >> /opt/install/Tomcat6.0.18/std_log/Server_Name.out@${suffix} &
[/code]
这样就可以了,由此可见双击(选择"在终端运行"和"运行"皆可)执行实际上就是打开一个新的Shell执行该脚本,路径这些变量都没法儿在新窗口生效,所以读取变量时失败,有时会创建一个长度为0的文件,有时候干脆什么也没有,期望高手指点一下。

问题3:我写了2个简单的脚本,aa.sh和bb.sh
aa.sh(/root/DeskTop)内容如下:
#!/bin/sh
nohup sh /opt/bb.sh >> ccc.txt &

bb.sh(/opt下)内容如下:
#!/bin/sh
tdy218="Tian Dongyun"
echo "${tdy218}"

产生的ccc.txt竟然不生成在桌面,而是/root目录下!这是怎么回事儿?




...全文
1014 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tdy218 2009-07-06
  • 打赏
  • 举报
回复
CSDN这般冷清!
咳~
tdy218 2009-07-05
  • 打赏
  • 举报
回复
没有人给个指导吗?
tdy218 2009-07-04
  • 打赏
  • 举报
回复
前两天工作忙,楼上推荐的《Shell十三问》的确不错,不过其中的讲解还没彻底弄懂。今天又将问题重新归纳了一下,如下:

问题一:在红帽Linux桌面上双击执行一个SH脚本时,"在终端中运行"和"运行"有什么区别?
解答:都是从"~"(User Home)执行一个脚本,只不过前者是新打开一个窗口去执行,后者是在后台执行。
待指正!

问题二:如果想使用子进程(脚本)中的变量,在调用时应该怎么做?
解答:在命令行或者Shell脚本中使用".空格/<path name>/<script name>"(注意:这里只有一个点)

《Shell十三问》第六问中有相关类似解释,只不过我试验的结果与《Shell十三问》作者所讲的稍有出入,我的结论:".空格./<path name>/<script name> 只能在Shell或者远程终端中执行(注意这里有2个点),不能在Shell脚本中执行,他会把第二个'.'当成路径的一部分,也就是从当前路径开始查找目标脚本。"


问题三:sh $path var/script.sh与sh "$path var/script.sh"已证实有区别(前者无法双击选择"在终端中运行",后者双击后选择"在终端中运行"和"运行"都可以),但这2种写法在Shell中执行却是相同的结果。为什么?

《Shell十三问》第四问中有""的解释,不过还没看明白,还请路过的朋友帮忙看看。

:《Shell十三问》简体中文版 下载



  • 打赏
  • 举报
回复
看界面,楼主是CentOS吧。

楼主问的几个都涉及环境变量的查找优先级吧,。
tdy218 2009-06-11
  • 打赏
  • 举报
回复
失望了,心凉了!~
tdy218 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lwh_1024 的回复:]
既然LZ选择linux,为什么要回避命令行呢?
[/Quote]
要换成我,我也不会这样做,客户非要这么做,没办法。

[Quote=引用 4 楼 meitolake 的回复:]
問題3:如果是雙擊運行的話,也許是因為系統是在/root下執行的aa.sh,而不是在/root/DeskTop下,
即使看起來是在桌面上雙擊aa.sh。比如在/root下輸入./DeskTop/aa.sh,生成的ccc.txt就在/root下。
[/Quote]

我在桌面上双击执行aa.sh,生成的ccc.txt怎么会在/root(当前用户的根目录)下?
莫非双击一个sh脚本时,是从/root(当前用户的根目录)目录开始?
这样的话,start.sh莫非先要cd ../才可以?,我试试去!

meitolake 2009-05-31
  • 打赏
  • 举报
回复
有的程序不是自己創建窗口,比如vi,在終端運行就是幫它開個終端。
問題3:如果是雙擊運行的話,也許是因為系統是在/root下執行的aa.sh,而不是在/root/DeskTop下,
即使看起來是在桌面上雙擊aa.sh。比如在/root下輸入./DeskTop/aa.sh,生成的ccc.txt就在/root下。
lwh_1024 2009-05-31
  • 打赏
  • 举报
回复
对于在"终端中运行"是否会这样,我不是很了解。因为我很少用xwindow,有时候为了方便系统参数配置时,会用一下,至于shell脚本则几乎不会在这里面去用鼠标执行。既然LZ选择linux,为什么要回避命令行呢?
不过LZ的钻研精神还是让我很敬佩的^_^ 具体"终端中运行"的含义,还需要路过的高手帮忙咯

问题三我好像理解错了,生成的文件应该是在当前目录下面,LZ可以到DeskTop目录中找找,桌面上的东西应该在这里面
tdy218 2009-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lwh_1024 的回复:]

问题二:情况一中"nohup sh ${top}/bin/startup.sh"可能是因为找不到路径(top)的原因,没执行到startup.sh。
改为情况二中的绝对路径,或者$top试试看
[/Quote]
改用$top后,双击这个脚本,选择"运行"执行成功,选择"在终端中运行"执行失败,且无日志。

能否这样解释:"在终端中运行"会打开一个新的窗口执行这个脚本,而用$top取top这边变量值时获取失败造成的吧,而双击后选择"运行"应该是在后台执行了吧。而且为打开新的shell,这样脚本中定义的变量还有效。

[Quote=引用 1 楼 lwh_1024 的回复:]
问题三:>> ccc.txt & 中,没有指明生成文件存放的路径,当然是生成在当前用户的根目录下,root用户也就是/root了
[/Quote]
为什么不会是当前路径? 如果你这个 脚本放在/opt下了,那将一个脚本的输出结果重定向的一个文件中,也会在当前用户的根路径下吗? 答案是否定的哦.
lwh_1024 2009-05-30
  • 打赏
  • 举报
回复
问题一:应该没有其他的区别,至少对脚本实现的功能是没任何的区别。

问题二:情况一中"nohup sh ${top}/bin/startup.sh"可能是因为找不到路径(top)的原因,没执行到startup.sh。
改为情况二中的绝对路径,或者$top试试看

问题三:>> ccc.txt & 中,没有指明生成文件存放的路径,当然是生成在当前用户的根目录下,root用户也就是/root了

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧