看不懂这句

sh/bash/dash/ksh/zsh等Shell脚本
回复
zhz.ubuntu
帖子: 19
注册时间: 2009-09-28 20:39

看不懂这句

#1

帖子 zhz.ubuntu » 2009-10-14 16:49

ROOT_DIR=/opt/enomalism2

if [ -f $ROOT_DIR/scripts/func.sh ]; then
. $ROOT_DIR/scripts/func.sh
else
echo "Could not find functions file, please check that func.sh file exists in the same directory"
exit 1
fi

蓝色的那句。
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

Re: 看不懂这句

#2

帖子 hubert_star » 2009-10-14 16:51

. 的作用与 source 一样

就是导入sh里面的变量到当前环境,并执行内部的一些代码

你可以认为这是#include
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
zhz.ubuntu
帖子: 19
注册时间: 2009-09-28 20:39

Re: 看不懂这句

#3

帖子 zhz.ubuntu » 2009-10-14 16:59

谢谢。
func.sh 中全部是函数,是不是把函数导入,在后面可以直接调用?
hubert_star 写了:. 的作用与 source 一样

就是导入sh里面的变量到当前环境,并执行内部的一些代码

你可以认为这是#include
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

Re: 看不懂这句

#4

帖子 hubert_star » 2009-10-14 17:05

明确的答案:是,包括在脚本里面定义的:变量、方法和执行过程,变量和方法你直接可以用,执行的代码在你包含时被调用
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
zhz.ubuntu
帖子: 19
注册时间: 2009-09-28 20:39

Re: 看不懂这句

#5

帖子 zhz.ubuntu » 2009-10-14 17:18

非常感谢hubert_star的回答。这之后其实还有一个问题:
执行蓝色(也就是. $ROOT_DIR/scripts/func.sh)这句后出错,提示bad substitution。是func.sh中有一个函数出错了。函数如下:
__pids_var_run() {
local base=${1##*/}
local pid_file=${2:-/var/run/$base.pid}

pid=
if [ -f "$pid_file" ] ; then
local line p
read line < "$pid_file"
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
done
if [ -n "$pid" ]; then
return 0
fi
return 1 # "Program is dead and /var/run pid file exists"
fi
return 3 # "Program is not running"
}
如果能说明哪里错了就更好了。(不好意思,本来有缩进的,发表就没有了)
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: 看不懂这句

#6

帖子 cnkilior » 2009-10-14 19:52

看不出。。
试着用sh -x you_script

就知道了
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

Re: 看不懂这句

#7

帖子 hubert_star » 2009-10-14 23:07

把你的#!/bin/sh改成#!/bin/bash或者#!/usr/bin/bash,反正就是不用ubuntu阉割的那个dash,再试试
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
zhz.ubuntu
帖子: 19
注册时间: 2009-09-28 20:39

Re: 看不懂这句

#8

帖子 zhz.ubuntu » 2009-10-15 9:51

太太太感谢了!!!!ubuntu还真麻烦。这是我安装的一个软件的脚本。之前就是bad substitution的错误。按照下面改就可以了。我对ubuntu无语了。
hubert_star 写了:把你的#!/bin/sh改成#!/bin/bash或者#!/usr/bin/bash,反正就是不用ubuntu阉割的那个dash,再试试
回复