如何自动获取 shell 脚本?

如何自动获取 shell 脚本?

如何让 shell 脚本将其命令作为源命令执行,而无需使用“source scriptname.sh”表达式来启动脚本?基本上我想要的是输入./脚本名.sh并命令人们表现得来源用于执行shell脚本。

答案1

没有一个 Unix shell 允许您将脚本标记为始终应以您希望的方式获取的脚本。我会创建一个alias或过程来执行您想要的操作,并将其放入我的启动脚本中。例如,在 tcsh 中:

alias scriptname source \!\!

在 bash 中,你可以将其写为一个过程:

scriptname( ) { source scriptname.sh $*; }

答案2

您可以使用一项功能来bash拦截用户输入并采取行动,覆盖任何常规命令的执行。

将以下内容添加到您的bash启动脚本:

shopt -s extdebug
function auto_source_names {
    local CMD=$BASH_COMMAND
    if [[ -f "$CMD" ]] && [[ ! -x "$CMD" ]] ; then
        source "$CMD"
        return 1
    else
        return 0
    fi
}
trap 'auto_source_names' DEBUG

这会导致执行每个命令时都调用该函数。如果它是不可执行文件的名称(否则我们也会阻止合法调用),则会获取该文件的名称,并且不会执行任何命令。请注意同名或位于同一目录中./foo.sh的文件。您可以添加额外的保护措施,例如要求文件扩展名或告诉您名称是文本文件。lsrm.shfile


例子:

创造foo.sh

FOO=bar

然后:

$ echo $FOO
$ foo.sh
$ echo $FOO
bar

答案3

第一行需要包含解释器的路径:
#! /bin/bash

然后使脚本文件可执行:
chmod +x scriptname.sh

现在您可以运行./scriptname.sh来执行它。

相关内容