运行以下bash脚本时...
#!/bin/bash
ATTEMPTS=3
DEST_DIR="/opt/satnet"
ATTEMPTS=3
URL="https://github.com/google/snappy/tarball/master"
CURL_OPTS='-sIkL'
SED_REGEX='/filename=/!d;s/.*filename=(.*)$/\1/'
FILENAME="$( curl $CURL_OPTS $URL | sed -r $SED_REGEX )"
DEST_FILE="$DEST_DIR/$FILENAME"
printf "\t* URL = %s\n" $URL
printf "\t* Remote tarball filename = %s\n" $FILENAME
WGET_BIN='wget'
WGET_OPTS_1="-t $ATTEMPTS -c -O $DEST_FILE"
WGET_OPTS="-t $ATTEMPTS -c -O $DEST_FILE $URL"
printf "\t* wget opts 1 = %s\n" "$WGET_OPTS_1"
printf "\t* wget opts = %s\n" "$WGET_OPTS"
echo " * wget opts 1 = $WGET_OPTS_1"
echo " * wget opts = $WGET_OPTS"
...第二个变量的输出应该包括第一个变量的输出加上URL;但是,它只显示URL,甚至不显示URL之前的字符串部分:
* URL = https://github.com/google/snappy/tarball/master
* Remote tarball filename = google-snappy-1.1.7-0-gb02bfa7.tar.gz
* wget opts 1 = -t 3 -c -O /opt/satnet/google-snappy-1.1.7-0-gb02bfa7.tar.gz
https://github.com/google/snappy/tarball/mastergle-snappy-1.1.7-0-gb02bfa7.tar.gz
* wget opts 1 = -t 3 -c -O /opt/satnet/google-snappy-1.1.7-0-gb02bfa7.tar.gz
https://github.com/google/snappy/tarball/mastersnappy-1.1.7-0-gb02bfa7.tar.gz
就像是出于某种原因,将“删除”的URL添加到字符串的初始部分。
我做错了什么?
答案 0 :(得分:1)
说实话,我无法像你的问题那样重现奇怪的显示错误。我在Linux shell中运行相同的代码,它显示得很好。
但我可以确认发布的代码输出中的curl
请求结果是DOS行结尾,
最终在FILENAME
变量的内容中,
这反过来可能会导致您遇到奇怪的输出。
删除有问题的\r
字符的简便方法是使用tr
:
FILENAME="$( curl $CURL_OPTS $URL | sed -r $SED_REGEX | tr -d '\r' )"