标签: source-command

在获取脚本时,如何在不退出调用 shell 的情况下跳过脚本的其余部分?

我有一个 bash 脚本,exitgetopts无法识别选项或找不到预期的选项参数时,我会在某个地方调用以跳过脚本的其余部分。

while getopts ":t:" opt; do
    case $opt in
        t)
            timelen="$OPTARG"
            ;;
        \?) printf "illegal option: -%s\n" "$OPTARG" >&2
            echo "$usage" >&2
            exit 1
            ;;
        :) printf "missing argument for -%s\n" "$OPTARG" >&2
           echo "$usage" >&2
           exit 1
           ;;
    esac
done

# reset of the script
Run Code Online (Sandbox Code Playgroud)

source在 bash shell 中编写脚本。当出现问题时,shell 会退出。

除了exit跳过脚本的其余部分但不退出调用外壳之外,还有其他方法吗?

替换exitwithreturn不像函数调用那样工作,脚本的其余部分将运行。

谢谢。

bash shell-script exit source-command

8
推荐指数
2
解决办法
9066
查看次数

传递给源脚本的参数错误

AIX 上的一个脚本,它检查传递的参数数量并在它们不正确时进行抱怨:-

if [ "$#" -ge 1 ]; then
  ...
else
  echo 'Usage: myscript <a> [b] [c]'
fi
Run Code Online (Sandbox Code Playgroud)

该脚本设置了一些环境变量,因此它是来源。我的意思是我在命令行上输入以下内容。没有第二个脚本,我不是从另一个脚本中获取脚本。

. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

如果我不传递任何参数,我希望它打印出使用语句,但它会使用传递给上一个源命令的参数运行(甚至不一定是这个脚本!)。

为了仔细检查这一点,我在脚本的开头添加了这一行以证明情况确实如此。

echo $# $@
Run Code Online (Sandbox Code Playgroud)

如果我不传递任何参数,它会打印出来自先前来源脚本的编号和参数列表。

$#当我传递零参数并获取它时,如何让它说为零?

最小可能的重新创建是一个脚本,因此:-

脚本文件

echo $# $@
Run Code Online (Sandbox Code Playgroud)

然后运行它: -

. ./myscript.sh a b c
Run Code Online (Sandbox Code Playgroud)

打印出来

3 a b c
Run Code Online (Sandbox Code Playgroud)

然后在没有任何参数的情况下再次运行它:-

. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

打印出相同的

3 a b c
Run Code Online (Sandbox Code Playgroud)

什么时候打印出来

0
Run Code Online (Sandbox Code Playgroud)

如果您不提供脚本并直接运行它:-

./myscript.sh
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作并打印出来

0
Run Code Online (Sandbox Code Playgroud)

我希望这能澄清手头的问题。

由于我似乎得到了很多答案来解释为什么上述方法不起作用,并且没有答案告诉我我应该做什么,我想我会再尝试一次尝试解释我正在尝试做的事情。

要求

我需要编写一个需要至少一个参数的脚本,如果没有使用所述参数调用它就会抱怨(请参阅上面问题中的第一个代码块),并且该脚本需要设置一些环境变量。由于第二个要求,我假设我需要获取脚本的来源,以便在脚本完成时仍然设置环境变量。你怎么能写一个脚本来告诉它什么时候没有传递参数,也可以设置环境变量?

parameter aix shell-script source-command

5
推荐指数
1
解决办法
2331
查看次数

/bin/ksh: 错误的解释器:没有那个文件或目录

#!/bin/ksh在第一行有脚本。当我尝试执行此脚本 (run ./myscript.sh) 时发生错误:

-bash: ./myscript.sh: /bin/ksh: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是当我通过source myscript.shbash myscript.sh命令执行此脚本时- 脚本成功运行。

是的,没有安装ksh,安装这个是正确的。但我无法理解不同的行为./bashsource

bash ksh shell-script shebang source-command

1
推荐指数
1
解决办法
1万
查看次数

为什么命令“源”有这个名字?

我想知道为什么从当前 shell 中的文件执行命令的命令命名为source. 我看不到当前 shell 中的运行命令与英文单词source的含义之间的关系。这个名字背后有历史吗?

command-line shell history shell-builtin source-command

0
推荐指数
1
解决办法
116
查看次数