Bash脚本重新提供文件

时间:2017-10-12 03:55:10

标签: linux bash shell

我只是想知道是否有来源文件,然后再次在轨道源中删除文件?

我在我的bash脚本上使用https://github.com/renatosilva/easyoptions,我在主脚本上采购easyoption.sh并且工作正常。但是当我有其他脚本从主脚本稍后加载时,我想要easyoptions.sh来源,并且--help应该在最后加载的文件上工作。

示例:

test.sh

#!/bin/bash

## EasyOptions Sub Test
## Copyright (C) Someone
## Licensed under XYZ
##     -h, --help              All client scripts have this, it can be omitted.

script_dir=$(dirname "$BASH_SOURCE")
# source "${script_dir}/../easyoptions" || exit # Ruby implementation
source "${script_dir}/easyoptions.sh" || exit # Bash implementation, slower

main.sh

#!/bin/bash

## EasyOptions Main
## Copyright (C) Someone
## Licensed under XYZ
## Options:
##     -h, --help              All client scripts have this, it can be omitted.
##         --test      This loads test.sh.

script_dir=$(dirname "$BASH_SOURCE")
 # source "${script_dir}/../easyoptions" || exit # Ruby implementation
 source "${script_dir}/easyoptions.sh" || exit # Bash implementation, slower

if [[ -n "$test" ]];then
    source "${script_dir}/test.sh"
fi

现在,当我尝试 ./main.sh --help 它会显示

  EasyOptions Main
      Copyright (C) Someone
      Licensed under XYZ
      Options:
          -h, --help              All client scripts have this, it can be omitted.
>              --test      This loads test.sh.

现在我想在下面工作 ./main.sh --test --help 它应该输出

  EasyOptions Sub Test
      Copyright (C) Someone
      Licensed under XYZ
          -h, --help              All client scripts have this, it can be omitted.

但它始终显示main.sh帮助

2 个答案:

答案 0 :(得分:1)

main.shsource easyoptions.sh时,它会解析所有命令行选项(包括--help--test)。稍后当您source test.sh时, easyoptions 将无法解析(即它不会看到--help)。您可以在echo "$@"之前添加source test.sh来验证这一点。

答案 1 :(得分:1)

正如@pynexj所说,"当您使用easyoptions.sh时,它将解析所有命令行选项" 所以你需要以下步骤:

1.您需要检查主要流程中的参数:

1.1如果第一个参数是--help(第一个参数表示$ 1,而不是$ 0"文件名"),则显示主帮助,

1.2如果第一个参数是--test,则加载test.sh并将其他参数传递给child。

  1. 如果子进程得到参数--help,它会显示孩子的帮助。
  2. 这是一个简单的例子,将main.sh的参数传递给child(proc.sh)。

    main.sh:

    first

    proc.sh:

    echo "main:"
    echo $1
    echo $2
    source ./proc.sh $2 
    
    运行cmd时

    echo "proc:"
    echo $1
    

    输出:

     ./main.sh test help 
    

    你可以看到,main.sh的第二个参数传递给了孩子