Linux 使Bash模块化
我有一堆Bash脚本,它们都使用了以下内容:Linux 使Bash模块化,linux,bash,shell,Linux,Bash,Shell,我有一堆Bash脚本,它们都使用了以下内容: BIN_CHATTR="/usr/bin/chattr" BIN_CHKCONFIG="/sbin/chkconfig"; BIN_WGET="/usr/bin/wget"; BIN_TOUCH="/bin/touch"; BIN_TAR="/bin/tar"; BIN_CHMOD="/bin/chmod"; BIN_CHOWN="/bin/chown"; BIN_ECHO="/bin/echo"; BIN_GUNZIP="/usr/bin/gunz
BIN_CHATTR="/usr/bin/chattr"
BIN_CHKCONFIG="/sbin/chkconfig";
BIN_WGET="/usr/bin/wget";
BIN_TOUCH="/bin/touch";
BIN_TAR="/bin/tar";
BIN_CHMOD="/bin/chmod";
BIN_CHOWN="/bin/chown";
BIN_ECHO="/bin/echo";
BIN_GUNZIP="/usr/bin/gunzip";
BIN_PATCH="/usr/bin/patch";
BIN_FIND="/usr/bin/find";
BIN_RM="/bin/rm";
BIN_USERDEL="/usr/sbin/userdel";
BIN_GROUPDEL="/usr/sbin/groupdel";
BIN_MOUNT="/bin/mount";
有没有一种方法可以让我用这样的全局设置创建一个Bash脚本,然后将它们包含在我想要运行的脚本中?是的,您可以将所有这些变量放在一个类似“settings.sh”的文件中,然后在脚本中执行以下操作:
source settings.sh
您可以将变量保存在shell脚本中,然后将其源文件:
source /path/to/variables.sh
实际上,您应该使用
,它在bash中与源代码相同,但具有更好的可移植性:
. /path/to/variables.sh
您正在查找源命令吗 mylib.sh:
#!/bin/bash
JAIL_ROOT=/www/httpd
is_root(){
[ $(id -u) -eq 0 ] && return $TRUE || return $FALSE
}
test.sh
#!/bin/bash
# Load the mylib.sh using source comamnd
source mylib.sh
echo "JAIL_ROOT is set to $JAIL_ROOT"
# Invoke the is_root() and show message to user
is_root && echo "You are logged in as root." || echo "You are not logged in as root."
顺便说一句-使用rsync-a镜像带有+x标志的脚本。是的,您可以。只需将变量和函数添加到文件中,使其可执行,并在需要访问它们的任何脚本顶部“执行”即可。下面是一个例子:
$ pwd
/Users/joe/shell
$ cat lib.sh
#!/bin/bash
BIN_WGET="/usr/bin/wget"
BIN_MOUNT="/bin/mount"
function test() {
echo "This is a test"
}
$ cat script.sh
#!/bin/bash
. /Users/joe/shell/lib.sh
echo "wget=$BIN_WGET"
test
$ ./script.sh
wget=/usr/bin/wget
This is a test