提供opped到管道bash脚本

时间:2013-01-13 14:27:05

标签: bash curl pipe getopts

我试图在将脚本内容传递给bash执行时为opash脚本提供opts。

#!/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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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