Чтение из файлового дескриптора и запись в stdout

Подробнее о комментарии @ 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] .

1
08.05.2018, 07:17
3 ответа

Предположим, что сценарий производит:

L1
L2

L4
L5

, затем следующая команда

script | sed 's/^\(.\+\)/ \[prepend\] \1/'

добавляет " [prepend] " к каждой не -пустой строке:

 [prepend] L1
 [prepend] L2

 [prepend] L4
 [prepend] L5
2
27.01.2020, 23:23

Возможно, вы захотите взглянуть на ловушку 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
1
27.01.2020, 23:23

Этот точный код, кажется, делает то, что я хочу, но не уверен, насколько он безопасен:

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 $$
0
27.01.2020, 23:23

Теги

Похожие вопросы