Подробнее о комментарии @ Graeme.
Загруженный сценарий - это сценарий bash со встроенным тарболом. Часть сценария сначала проверяет tarball по md5sum, а затем распаковывает tar, который содержит несколько архивов .tar.bz2
. Затем для распаковки архивов используется пользовательская функция extract _ dist ()
. Т.е.:
extract_dist python-2.7.10-0
extract_dist conda-3.14.1-py27_0
...
извлекает файлы:
python-2.7.10-0.tar.bz2
conda-3.14.1-py27_0.tar.bz2
...
Для 32-разрядной версии часть скрипта может быть извлечена:
head -n 467 Anaconda-2.3.0-Linux-x86.sh
Для 64-разрядной версии часть скрипта может быть извлечена:
head -n 466 Anaconda-2.3.0-Linux-x86_64.sh
Как видно, часть скрипта заканчивается на exit 0
, который прерывает любую дальнейшую обработку скрипта bash
Tarball извлекается с помощью:
tail -n +469 $THIS_PATH | tar xf - --no-same-owner
tail -n +468 $THIS_PATH | tar xf - --no-same-owner
для 32-разрядных и 64-разрядных соответственно.
Можно, например, сделать
tail -n +469 Anaconda-2.3.0-Linux-x86.sh | tar -t
, чтобы перечислить файлы в 32-разрядном архиве.
-121--61325-
Проблема решена путем удаления подчеркивания из значения HOSTNAME из/etc/pve/nodes/pve/openvz/130.conf.
-121--289372-
POSIXly:
[ "$((hex_string_1))" -eq "$((hex_string_2))" ]
Для старых версий тире
необходимо:
[ "$(($hex_string_1))" -eq "$(($hex_string_2))" ]
POSIXly, About:
[ "$hex_string_1" -eq "$hex_string_2" ]
Спецификация POSIX для [
aka test
utility говорит, что операнды должны быть целыми числами, без указания, какие формы целых чисел (десятичные, восьмеричные, шестнадцатеричные...) должны поддерживаться, но это на самом деле рассматривается в пункт 6 в Utility Argument , который указывает, что будет использоваться по умолчанию, если нет
6. если не указано иное, всякий раз, когда операнд или параметр-аргумент является или содержит числовое значение:
- Число интерпретируется как десятичное целое число.
- Цифры в диапазоне от 0 до 2147483647 синтаксически распознаются как числовые значения.
- Если в описании утилиты указано, что она принимает отрицательные числа в качестве операндов или аргументов опции, цифры в диапазоне от -2147483647 до 2147483647 синтаксически распознаются как числовые значения.
- Допустимы диапазоны, превышающие указанные здесь.
На практике [0x10 -eq 16]
работает только с posh
( [0x1-eq 0x01
] работает в AT & T ksh
(но только потому, что они рассматриваются как 0
, [0x2-eq 0x123]
также возвращают значение true), и за исключением posh
(где ошибка ), все реализации [
возвращают значение false на [010 -eq 8]
(как в 010
рассматривается как десятичная, а не восьмеричная)).
В ksh93
, хотя вы не можете сделать [0x10 -eq 16]
, вы можете сделать [+ 0x10 -eq 16]
(также с posh
). В производных AT & T ksh
и pdksh
(включая posh
) можно также выполнить ['16 # 10' -eq 16]
.
Предположим, что сценарий производит:
L1
L2
L4
L5
, затем следующая команда
script | sed 's/^\(.\+\)/ \[prepend\] \1/'
добавляет " [prepend] " к каждой не -пустой строке:
[prepend] L1
[prepend] L2
[prepend] L4
[prepend] L5
Возможно, вы захотите взглянуть на ловушку DEBUG
в bash. Изman builtins
:
If a sigspec is DEBUG, the command arg is executed before every simple command,
for command, case command, select command, every arithmetic for command, and
before the first command executes in a shell function (see SHELL GRAMMAR
above). Refer to the description of the extdebug option to the shopt builtin
for details of its effect on the DEBUG trap. If a sigspec is RETURN, the com‐
mand arg is executed each time a shell function or a script executed with the.
or source builtins finishes executing.
Таким образом, вы можете настроить функцию отладки следующим образом. Поскольку он запускается перед командами, вы можете использовать его для добавления к вашему выводу.
#!/bin/bash
debug() {
: # echo or other commands here
}
trap debug DEBUG
# Commands here
Этот точный код, кажется, делает то, что я хочу, но не уверен, насколько он безопасен:
rm foo
mkfifo foo
exec 3<>foo
(
cat <&3 | while read line; do
if [[ -n "$line" ]]; then
echo " [prepend] $line";
fi
done &
)
echo "" >&3;
echo "" >&3;
echo "foo" >&3
echo "bar" >&3
echo "baz" >&3
pkill -P $$