Найденный вами «ответ» верен, настройка конфигурации прокси для curl
— proxy
, а не http_proxy
. Сообщение об ошибке довольно неясно...
Поведение, которое вы видите, когда вы устанавливаете proxy
, довольно распространено в корпоративных настройках. :ваш прокси-сервер не поддерживает внутренние сайты, поэтому вам нужно настроить свой прокси-сервер -с помощью инструментов для игнорирования прокси-сервера для внутренних сайтов. (это настройка, обычно выполняемая с помощьюproxy.pac
). Чтобы настроить это, вам нужно использовать опцию noproxy
и указать через запятую -список хостов и/или доменов, для которых не следует использовать прокси.
Немного саморекламы :мы написали библиотеку под названием libbytesize для выполнения этих вычислений на C и Python, а также в ней есть инструмент командной строки под названием bscalc
$ bscalc "5 * (100 GiB + 80 MiB) + 2 * (300 GiB + 15 GiB + 800 MiB)"
1215425413120 B
1186938880.00 KiB
1159120.00 MiB
1131.95 GiB
1.11 TiB
Библиотека входит в состав большинства дистрибутивов, но, к сожалению, инструмент отсутствует. Он есть в Fedora в libbytesize-tools
и SuSE в пакете bscalc
, но не в Debian/Ubuntu.
Есть Бкал .
$ bcal -m "(5kib+2mib)/2"
1051136 B
$ bcal -m "(5kb+2mb)/2"
1002500 B
Флаг -m
предназначен для краткого вывода. При его удалении выводятся подробные результаты с основанием 2 (КиБ, МиБ, ГиБ, ТиБ )и основанием 10 (кБ, МБ, ГБ, ТБ ).
Он не понимает 86k
или 320m
или 1.7g
, ведь это неправильные единицы байта. В этом случае вы можете использовать Sed, чтобы добавить b
после каждой буквы, а затем передать его вbcal
:
$ cat file
1.7g+320m+86k
$ sed 's/[gmk]/&b/g' file | bcal -m
bcal> 1.7gb+320mb+86kb
2020086000 B
Вы также можете использовать его в интерактивном режиме.
В zsh
вы можете определить математическую функцию, например:
() {
typeset -gA bsuffix
local n=1 ni=1 s
for s (k m g t p e) {
(( n *= 1000 )); (( ni *= 1024 ))
(( bsuffix[$s] = bsuffix[${s}ib] = bsuffix[${s}io] = ni ))
(( bsuffix[${s}b] = bsuffix[${s}o] = n ))
}
}
b() {
set -o localoptions -o extendedglob
local s=${(M)1%(#i)(${(j:|:k)~bsuffix})}
(( ${1%$s} * ${bsuffix[$s:l]-1} ))
}
functions -Ms b
Тогда вы сможете использовать b(1G)
, b(1mB)
в любом арифметическом выражении zsh, например, в ((.... ))
, $((... ))
, $array[...]
и т. д.или вzcalc
:
$ <<< $((b(86k) + b(320mb) + b(1.7gio)))
2145449164.8
$ autoload zcalc
$ zcalc
1> b(86k) + b(320mb) + b(1.7gio)
2.14545e+09
2> :sci 15
2145449164.8
$ echo $(( b(infeo) ))
Inf
(обратите внимание, что мы не делаем различий между b
иB
(или o
/ O
), соответствие нечувствительно к регистру. Это не интерпретируется как бит против байт).
Другой подход может заключаться в том, чтобы функция b()
принимала все выражение в качестве аргумента и заменяла все суффиксы на* $bsuffix[<suffix>]
b() {
set -o localoptions -o extendedglob
local s=${(M)1%(#i)(${(j:|:k)~bsuffix})}
(( ${1//(#bi)([0-9.][[:blank:]]#)(${(j:|:k)~bsuffix})/$match[1] * $bsuffix[$match[2]:l] } ))
}
А потом:
$ echo $(( b(1m + 1Mb) ))
2048576
Существует проблема с e
/E
(exa ), которая ставит под сомнение работу в том, что 1e-3GB
будет интерпретироваться не как 0.001 * 1000000000
, а как 1 * 1152921504606846976 - 3 * 1000000000
.
В любой оболочке с поддержкой арифметики с плавающей запятой (ksh93, zsh, yash )всегда можно определить:
K=1024 M=$((K * K)) G=$((M * K)) T=$((G * K)) P=$((T * K)) E=$((P * K))
KiB=$K MiB=$M GiB=$G TiB=$T PiB=$P EiB=$E
KB=1000 MB=$((KB*KB)) GB=$((MB*KB)) TB=$((GB*KB)) PB=$((TB*KB)) EB=$((PB*KB))
Или играть в гольф:
K=1024 EiB=$((E=K*(P=PiB=K*(T=TiB=K*(G=GiB=K*(M=MiB=K*K))))))
KB=1000 EB=$((EB=KB*(PB=KB*(TB=KB*(GB=KB*(MB=KB*KB))))))
И пиши$(( 1.1*GB + 5*K ))
чтобы добавить суффиксы на выходе, вы можете использовать GNUnumfmt
:
$ human() numfmt --field=- --to=iec --suffix=iB
$ echo $(( b(1m + 1Mb) )) | human
2.0MiB
powershell(это одна из оболочек для *nix для тех из вас, кому интересно, )встроена -в суффиксах "SI" для числовых литералов , чтобы вы могли использовать их напрямую
PS /home> $f = 5 * (100GB + 80MB) + 2 * (300GB + 15GB + 800MB)
PS /home> $f
1215425413120
PS /home> "In MB: " + $f/1MB
In MB: 1159120
PS /home> "In GB: "; $f/1GB
In GB:
1131.953125
PS /home> "In TB: {0}" -f ($f/1TB)
In TB: 1.10542297363281
Это двоичные префиксы, а не десятичные префиксы, поэтому, если вы хотите использовать десятичные единицы, просто умножьте их на 1eX
, чтобы получить желаемое значение
PS /home> 1KB; 1MB; 1GB; 1TB; 1PB
1024
1048576
1073741824
1099511627776
1125899906842624
PS /home> $K = 1e3; $M = 1e6; $G = 1e9
PS /home> 1*$G
1000000000
PS /home> 5 * (100*$G + 80*$M) + 2 * (300*$G + 15*$G + 800*$M)
1132000000000
Вы можете сохранить эти константы в профиле (, аналогичном .bashrc
или .bash_profile
в bash ), чтобы повторно использовать их каждый раз, когда вы открываете PowerShell
PowerShell на самом деле намного мощнее. Он работает на платформе.NET, поэтому он может делать все, что может делать.NET :математика bigint, десятичная математика, побитовые операции, тригонометрия, дата -вычисления времени...
Поскольку ОП хочет чистый калькулятор , я покажу еще несколько примеров того, как PowerShell можно использовать для этой цели. Приведенные выше математические функции в основном относятся к классу .NET Math и пространству имен Numerics . Вы поместите типы класса.NET внутрь []
, например [math]
или [system.math]
для класса Math
(PowerShell нечувствителен к регистру -).Вот некоторые другие вещи, которые могут быть полезны программистам:
Побитовые операции (побитовые операции начинаются с -b
, за исключением операций сдвига)
[uint64]::MaxValue/3 + (-bnot 20) + (1L -shl 22) + (0x23 -band 0x34)
Большое целое математика:[bigint]::Pow([uint64]::MaxValue, 20)
Произвольные целые числа и математические выражения с плавающей точкой -
1.56 + 0.23/[math]::Pow([math]::Sqrt([math]::Log(20) + [math]::Sin([math]::PI/3)), 4)
Математика для десятичного типа(128 -бит):1.23d * 3.45d / 28
Вычисление размера файла или объекта :Использование числовых суффиксов 12.5GB + 5.8MB + 1392KB
для двоичных единиц и 12.5e9 + 5.8e6 + 1392e3
для десятичных единиц (G = 1e9, M = 1e6, K = 1e3)
Преобразование в/из base64:[Convert]::ToBase64String
и[Convert]::FromBase64String
Дата/время Манипулирование. Например, преобразование необработанных значений эпохи в дату и время и наоборот
[datetime]::FromFileTime(0x01d15614cbaee92c)
[datetime]::ParseExact("08-12-2012","dd-MM-yyyy", `
[Globalization.CultureInfo]::InvariantCulture)
Форматирование строк и базовое преобразование. Все, что поддерживаетString.Format
в.NET, будет работать. Для получения дополнительной информации прочитайте об операторе форматирования . Вы также можете выполнять расширенные операции со строками и регулярными выражениями. Некоторые примеры:
'somestring'.Substring(4) * 3 -replace 'ings', 'eet'
'{0:X}' -f (0x12 + 34)
[convert]::ToString(0x12 + 34, 16)
'This is an emoji' + [char]::ConvertFromUtf32(0x1F60A)
Прямая обработка XML и JSON
Вызов функций в *.SO (*.DLL в файлах Windows )напрямую
Программирование графического интерфейса. Вот небольшой пример приложения истории буфера обмена
Для получения дополнительной информации см.
или подпишитесь на блог доктора Скрипто