解决传入参数时Bash脚本没有此类文件或目录

时间:2018-06-29 00:00:36

标签: bash

我有一个bash脚本,如下所示:

if [ $# -eq 2 ]; then
    REDIS_HOME=$2
else
    if [ $# -eq 3 ]; then
        REDIS_HOME=$2
        PORTS=$3
    else
        REDIS_HOME="/usr/local/redis"
    fi
fi

case "$1" in
    start)
       if [ -z "$PORTS" ]; then
           cmd="$REDIS_HOME/bin/redis-server $REDIS_HOME/redis-6379.conf"
           $cmd
       else
           IFS=",";
           for port in $PORTS
           do
               cmd="$REDIS_HOME/bin/redis-server $REDIS_HOME/redis-$port.conf"
               $cmd
           done
       fi
    ;;
    *)
    ;;
esac

exit 0

当我使用my_script.sh start运行脚本时,通过在脚本中使用默认的redis home,它可以很好地工作。但是当我与my_script.sh start /usr/local/redis 6379一起运行时,它显示为"/usr/local/redis/bin/redis-server /usr/local/redis/redis-6379.conf" No such file or directory

基本上,我要传递相同的REDIS_HOME,但是我无法弄清楚如果脚本作为参数传递时,脚本为什么无法解析路径。

1 个答案:

答案 0 :(得分:2)

SDWebImageDownloader.shared().setValue("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", forHTTPHeaderField: "Accept") 引起了问题。当你做

IFS=,

它使用$cmd $IFS的扩展分解为单词。由于$cmd中没有空格,因此不会将空格视为程序名称和参数之间的分隔符,因此将整个结果视为程序名称。当然也找不到。

我不确定为什么首先需要$IFS变量。您可以这样做:

$cmd