2013-01-13 60 views
2

我试图提供opts给bash脚本,当管道脚本内容为bash执行时。提供opts到管道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 

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

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

回答

2

你需要为了设置位置参数为一个交互的shell对于bash -s选项:

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

啊,一个通常的RTFM情况。谢谢。 – pduersteler

+0

由于某种原因,用卷曲和URL调用我的脚本似乎不起作用。我知道调用脚本并将其管理为bash是使用“-s”,但getopts不适用于它。可以请一些人协助吗? –

1

上面的例子是误导,因为您等待“U”选项,但只设置“P”选项。 这里的任何方式都是如何用curl调用它:

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