4

私は Stackoverflow を初めて使用し、bash スクリプトもかなり初めて使用するので、そのようなばかげた質問をすることをお許しください。ここで多くの回答を実際に閲覧しましたが、何もうまくいかないようです。

この小さなスクリプトを作成して、wordpress.org の最新バージョンをチェックし、スクリプトがある場所と同じディレクトリにそのファイルが既にあるかどうかを確認しようとしています。

#!/bin/bash

function getVersion {
new=$(curl --head http://wordpress.org/latest.tar.gz | grep Content-Disposition | cut -d '=' -f 2)
echo "$new"
}

function checkIfAlreadyExists {
    if [ -e $new ]; then
        echo "File $new does already exist!"
    else
        echo "There is no file named $new in this folder!"
    fi
}

getVersion
checkIfAlreadyExists

出力が次のように機能します。

jkw@xubuntu32-vb:~/bin$ ./wordpress_check 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
wordpress-3.4.1.tar.gz
 in this folder! named wordpress-3.4.1.tar.gz
jkw@xubuntu32-vb:~/bin$ 

したがって、curl&grep&cut で正しいファイル名を取得できますが、変数に何か問題があります。5行目で印刷すると問題ないように見えますが、12行目で印刷するとおかしくなります。また、if ステートメントが機能しません。同じディレクトリにファイルがあります。

curl --head の結果を出力するとhttp://wordpress.org/latest.tar.gz | grep Content-Disposition | テキストファイルで -d '=' -f 2 をカットすると、最後に新しい行が表示されるようです。これが問題でしょうか? コマンドを xdd にパイプすると、次のようになります。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
0000000: 776f 7264 7072 6573 732d 332e 342e 312e  wordpress-3.4.1.
0000010: 7461 722e 677a 0d0a                      tar.gz..

..そして、私はそれを理解することはできません。

ここで多くの同様の質問で提案されているように、コマンドトラフtr '\n' '\0'またはtr -d '\n'をパイプしようとしましたが、何もしないようです。何か案は?

PS: 行がどこにあるのかも気になります..

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

..私のシェル出力に来てください。ターミナルでコマンドcurl --head http://wordpress.org/latest.tar.gzだけを実行すると、出力にこのような行がありません。

4

1 に答える 1

2

これは、コードの作業バージョンであり、変更が行われた理由についてコメントされています。

#!/bin/bash

function latest_file_name {
    local url="http://wordpress.org/latest.tar.gz"

    curl -s --head $url | # Add -s to remove progress information
    # This is the proper place to remove the carridge return.
    # There is a program called dos2unix that can be used as well.
    tr -d '\r'          | #dos2unix
    # You can combine the grep and cut as follows
    awk -F '=' '/^Content-Disposition/ {print $2}'
}


function main {
    local file_name=$(latest_file_name)

    # [[ uses bash builtin test functionality and is faster.
    if [[ -e "$file_name" ]]; then
        echo "File $file_name does already exist!"
    else
        echo "There is no file named $file_name in this folder!"
    fi
}

main
于 2012-07-27T08:10:49.310 に答える