Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使Bash模块化_Linux_Bash_Shell - Fatal编程技术网

Linux 使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

我有一堆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/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