如何使用传入的参数创建别名/映射到命令列表

菜鸟

我不确定创建它的最佳方法是什么,但这是我想在这个 shell 脚本中执行的流程。我基本上有一个命令/cli列表(将db连接字符串传递给postgres),我想通过传入别名和另一个参数(名称)来创建快捷方式,以便我可以执行命令。

我正在尝试使用关联数组,但不确定这是否是这样做的方法。

这是我到目前为止。

#!/bin/bash

set -e
set -x


declare -A cluster_to_endpoint=(
  [c01]="psql -h test-endpoint1-us-east-1.redshift.amazonaws.com -U masteruser -v v1=$NAME -p 5439 -f getTableDetails.sql"
  [c02]="psql -h test-endpoint2.us-east-1.redshift.amazonaws.com -U masteruser -v v1=$NAME -p 5439 -f getTableDetails.sql"
  [c03]="psql -h test-endpoint3.us-east-1.redshift.amazonaws.com -U masteruser -v v1=$NAME -p 5439 -f getTableDetails.sql"
)


while getopts ":c:n:" opt; do
  case $opt in
    c) cluster="$OPTARG";;
    n) name="$OPTARG";;
    *) usage
       exit 1
       ;;
  esac
done

getopts用于传入参数。

我想像这样执行它: ./myscript.sh -c c01 -n foobar

我想在 macOS 上运行它。

格雷戈里·尼斯贝特

如果您想使用较新版本的 bash,请更新 shebang 以引用它,最好使用#!/usr/local/bin/bash#!/opt/local/bin/bash取决于您的包管理器。#!/usr/bin/env bash如果新的 bash 将更早地出现在 PATH 中,您也可以使用

如果要使用系统 bash,则必须更改代码以避免关联数组。

OS X 附带的 bash 版本不支持关联数组。此版本的bash可作为/bin/bash和使用/bin/sh在 OS X 上自己(或使用 macports 或自制软件)安装更高版本的 bash 没有任何障碍。

$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Copyright (C) 2007 Free Software Foundation, Inc.

关联数组是在版本4中引入的。这是因为OS X使用的最新bash版本是GPL v2。

作为一种解决方法,您可以使用 with 函数,case因为您不会在运行时向地图添加新元素:

cluster_to_endpoint() {
  case "$1" in
    c01)
      psql -h test-endpoint1-us-east-1.redshift.amazonaws.com -U masteruser -v v1="$NAME" -p 5439 -f getTableDetails.sql
      ;;
    c02) 
      psql -h test-endpoint2.us-east-1.redshift.amazonaws.com -U masteruser -v v1="$NAME" -p 5439 -f getTableDetails.sql
      ;;
    c03)
      psql -h test-endpoint3.us-east-1.redshift.amazonaws.com -U masteruser -v v1="$NAME" -p 5439 -f getTableDetails.sql
      ;;
  esac
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确创建case语句以将别名映射到值

来自分类Dev

制作一个将参数映射到命令中间的别名

来自分类Dev

如何使用包含'和'的命令创建别名

来自分类Dev

如何使用在Cmder中接受参数的多个命令创建别名?

来自分类Dev

如何为两个使用参数的Git命令创建别名?

来自分类Dev

使用参数映射到文件

来自分类Dev

如何从地图映射到列表

来自分类Dev

将咖喱映射到参数列表

来自分类Dev

如何为命令创建别名?

来自分类Dev

如何在windwos中使用参数创建git别名

来自分类Dev

如何使用自动映射器从嵌套列表映射到目标对象?

来自分类Dev

如何映射到熊猫列表中的值

来自分类Dev

如何让mybatis将列表映射到对象

来自分类Dev

如何随时间创建重复的数据帧并将其映射到时间列表?

来自分类Dev

遍历映射到单个键的值列表以创建新列表

来自分类Dev

将函数参数映射到Clojure中的嵌套列表上

来自分类Dev

将不同的参数映射到数据框列表

来自分类Dev

bash别名:在shell命令中使用参数

来自分类Dev

如何在Matlab中创建命令别名

来自分类Dev

如何在Matlab中创建命令别名

来自分类Dev

如何为ssh命令创建别名?

来自分类Dev

如何为长 ls 命令创建别名?

来自分类Dev

使用Modelmapper,如何映射到没有默认/无参数构造函数的类?

来自分类Dev

映射到多态列表

来自分类Dev

如何使用 C# 检索传入参数?

来自分类Dev

如何从源列表映射到不同的目标列表

来自分类Dev

如何使用Java 8流将列表中的元素映射到其索引?

来自分类Dev

如何使用自然语言处理将文本映射到预设的主题列表

来自分类Dev

如何使用Formtastic语法在Ruby on Rails中将字符串列表映射到整数属性?

Related 相关文章

热门标签

归档