如何让 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
的文件。您可以添加额外的保护措施,例如要求文件扩展名或告诉您名称是文本文件。ls
rm
.sh
file
例子:
创造foo.sh
:
FOO=bar
然后:
$ echo $FOO
$ foo.sh
$ echo $FOO
bar
答案3
第一行需要包含解释器的路径:
#! /bin/bash
然后使脚本文件可执行:
chmod +x scriptname.sh
现在您可以运行./scriptname.sh
来执行它。