关闭

shell脚本问题&技巧

标签: shell
489人阅读 评论(0) 收藏 举报
分类:



标准输入输出问题

cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中

详见http://blog.csdn.net/hnmsky/article/details/7035814



source & . 环境问题

如cmdEnv命令是通过source 或 . 导入到环境中,

想在cmdline中运行脚本shB,且可以shB可以调用cmdEvn,

则可以这样调用:

sin$ . shB cmdEvn



脚本中运行其它脚本,兼容问题:

autorun.sh:

#!/bin/sh

....

./tmp.sh


tmp.sh:

. ./build/evesetup.sh

....


evesetup.sh:

function hmm(){

cat <<EOF

heloo,comment begin

comment end

EOF

}


运行autorun.sh 报错:build/envsetup.sh: 1: Syntax error: "(" unexpected

解决1:autorun.sh 使用#!/bin/bash ,之后使用at命令也可以运行。

解决2:去掉autorun.sh第一行,与evesetup.sh风格一致。at命令运行会报错

解决3:执行$sudo dpkg-reconfigure dash命令,并选择“否”(配置使用dash环境而非bash环境)(未尝试)



http://www.51testing.com/html/02/403602-236690.html

#!/bin/sh
cd /home

./1.sh运行之后,pwd发现还是在原目录下,并未切换至home目录。该脚本这么简单,不会是脚本问题,那时什么原因呢?我在网上查找,有人说,Ubuntu默认的是dash脚本而非bash脚本,dash的速度较快但是有些在bash上可以运行的脚本在dash上就不行。可以用ls /bin/sh -al ,来查看一下指向的哪种类型,如果是指向dash,我们可以把它换成bash,sudo dpkg-reconfigure dash
出现菜单问你是否要dash的时候,选no就可以了。


我改了之后问题又来了,还是无法cd,我就无语了。然后又在脚本里加入了一句pwd查看路径,然后运行结果是进入了/home,可是运行结束再pwd就不行了,当时我就纠结了,实际上脚本是正确执行了的,但是我们看到的结果是不对的。后来看了Shell脚本十三问,才明白其中道理。原来在我们执行脚本时,会自动运行一个子脚本去完成里面的指令,然后回到父脚本,所有当我们在脚本执行结束后去pwd,是不行的。那如何让名命令在当前脚本执行呢?可以用source ./1.sh或者../1.sh,这样就可以了。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40226次
    • 积分:815
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:29篇
    • 译文:0篇
    • 评论:0条
    文章分类