【问题标题】:Providing opts to piped bash script为管道 bash 脚本提供选项
【发布时间】:2012-12-27 14:02:20
【问题描述】:

在将脚本内容传送到 bash 以执行时,我试图为 bash 脚本提供选项。

#!/bin/bash

SETUP_PACKAGES=""

while getopts ":u:" opt; do
  case $opt in 
    p)
       if [[ "$OPTARG" =~ "mysql" ]] ; then SETUP_PACKAGES="$SETUP_PACKAGES mysql-client libmysqlclient-dev"; fi
       ;;

    # other parts omitted...
  esac
done

在像./script.sh -p mysql 这样的shell 中执行脚本是可行的。目的是将脚本存储在存储库中,所以我尝试了curl -L example.com/my/script | bash -p mysql。然而,这会抛出 /usr/bin/mysql: /usr/bin/mysql: cannot execute binary file

我需要做什么来实现我的目标?

【问题讨论】:

    标签: bash curl pipe getopts


    【解决方案1】:

    上面的示例具有误导性,因为您等待“u”选项但仅设置“p”选项。 这里的任何方式都是如何用 curl 调用它:

    bash <(curl -L example.com/my/script) -p mysql
    

    【讨论】:

      【解决方案2】:

      您需要 bash 的 -s 选项才能为交互式 shell 设置位置参数:

      curl -L example.com/my/script | bash -s -p mysql
      

      【讨论】:

      • 由于某种原因用 curl 调用我的脚本,但 url 似乎不起作用。我知道调用脚本并将其传递给 bash 是使用“-s”,但 getopts 不适用于它。有人可以帮忙吗?
      猜你喜欢
      • 2016-04-10
      • 2016-03-13
      • 2015-09-21
      • 2020-10-04
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      相关资源
      最近更新 更多