Filename: Private: No Yes Filetype: Auto ABAP Sophia Apex Azure CLI Batch Bicep C Cameligo Clojure CoffeeScript C++ C# CSP CSS Cypher Dart Dockerfile ECL Elixir Flow9 FreeMarker2 FreeMarker2 (Angle/Bracket) FreeMarker2 (Angle/Dollar) FreeMarker2 (Auto/Bracket) FreeMarker2 (Auto/Dollar) FreeMarker2 (Bracket/Bracket) FreeMarker2 (Bracket/Dollar) F# Go GraphQL Handlebars Terraform HTML Ini Java JavaScript Julia Kotlin Less Lexon Liquid Lua Modula-3 Markdown MDX MIPS DAX MySQL Objective-C Pascal Pascaligo Perl PostgreSQL PHP Plain text ATS PQ PowerShell Protobuf Pug Python Q# R Razor Redis Redshift ReStructuredText Ruby Rust Small Basic Scala Scheme Sass Shell Solidity SPARQL SQL StructuredText Swift SV Tcl Twig TypeScript TypeSpec Visual Basic V WebGPU Shading Language XML YAML Indentation: Spaces Tabs 1 2 3 4 5 6 7 8 Clone #!/bin/bash # # Usage # usage() { echo 'Usage:' echo " ${0} <chitanka-book-url>..." echo echo 'Options:' echo " -f FMT, --format=FMT Set format (default: ${FORMAT})" echo " -m MIR, --mirror=MIR Set mirror (default: ${MIRROR})" exit "${1}" } # # Defaults # FORMAT='epub' MIRROR='m3.chitanka.info' ARGS=() # # Parse # PARSE='true' while [[ -n "${1}" ]]; do if ${PARSE}; then case "${1}" in -h|--help) usage 0;; -f|--format) FORMAT="${2}"; shift;; -f*) FORMAT="${1:2}";; --format=*) FORMAT="${1:9}";; -m|--mirror) MIRROR="${2}"; shift;; -m*) MIRROR="${1:2}";; --mirror=*) MIRROR="${1:9}";; --) PARSE='false';; -*) echo "${0}: invalid option: ${1}" >&2; echo >&2; usage 1 >&2;; *) ARGS+=("${1}");; esac else ARGS+=("${1}") fi shift done if [[ ${#ARGS[@]} -ne 1 ]]; then echo "${0}: wrong number of arguments (given ${#ARGS[@]}, expected 1+)" >&2 echo >&2 usage 1 >&2 fi for url in "${ARGS[@]}"; do if [[ "${url}" = *://chitanka.info/* ]]; then url="${url/chitanka.info/${MIRROR}}" fi if [[ "${url}" != */*.${FORMAT}* ]]; then url="${url}.${FORMAT}" fi if [[ "${url}" != *\?please ]]; then url="${url}?please" fi redirect_url="$(curl -si "${url}" | awk -F: '/ocation:/ { gsub(/^ */, "", $2); gsub(/ *$/, "", $2); gsub(/[\n\r]/, "", $2); print $2 }')" if [[ "${redirect_url}" != https://* ]]; then redirect_url="https://m3.chitanka.info${redirect_url}" fi echo "[${url}] -> [${redirect_url}]" curl -sLO "${redirect_url}" done Paste