$ A=("one" "two" "three") ; echo "${A[0]} - ${A[1]} - ${A[2]}"
one - two - three
$ echo "${A[0]} - ${A[1]} - ${A[2]}"
- two - three
Почему в результате второй команде нет первого элемента?
UPD: Еще странность: на только что запущенном шелле:
$ [[ -v A ]] && echo Exists
Exists
Куда копать?
$ bash --version
GNU bash, version 4.3.42(1)-release (i686-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Gentoo, работа с конфигами при обновлении пакета, как я ее понимаю: 1. Скачиваются файлы пакета; проверки, распаковки, компиляция... 2. Установка в песочницу 3. На каком-то этапе формируется файл конфигурации (кстати, точное определение еще нужно дать - см. вопрос 2). 4. Догадываюсь, что на этом этапе куда-то записывается «образ» конфига (наверное это хеш или что-то еще - см. вопрос 3), чтобы в следующий раз можно было сделать проверку модифицирован ли файл пользователем (см. шаг 5). 5. Проверяется (каким-то образом) модифицирован существующий (уже установленный) файл конфига пользователем. 6. Если существующий файл не был модифицирован, то emerge заменит существующий файл новым (из песочницы). 7. Если существующий файл таки был модифицирован пользователем, то новый конфиг будет установлен как ._cfg0001_xxxxxxx.
Проблема: любая модификация конфигов пользователем приводит к размножению ._cfg* файлов при апдейте пакетов.
Задача: патчить конфиг перед его установкой.
Вопросы: 1. Как выполнить скрипт сразу после шага 3 и желательно без модификации ebuild'ов? (Именно скрипт, так как простой patch в общем случае здесь не подходит) 2. Догадываюсь, что описанный механизм работы с конфигами работает не со всеми файлами. Например, если модифицирую /bin/mount, оно ж мне не создаст при обновлении ._cfg0001_mount? Где/как определяется что есть конфиг? 3. Расскажите, всё-таки, как происходит проверка конфигов? Где и на каком этапе записывается образ/хеш для сравнения? 4. На что еще имеет смысл обратить внимание для выполнения поставленной задачи?
Был какой-то видеоролик, по-моему муз. клип или что-то ещё... И там был фрагмент как-бы советского кино (скорее всего просто имитация или нарезка), а точнее немого кино (то есть сначала кадр, потом текст, опять кадр, опять такст и т. п.). Там один спрашивает «Даешь?», второй отвечает «Даю!», первый (а может другие) «Уррааа!».
Не могу завести 1-wire на raspberry pi. Делаю через owfs, но, думаю, проблема глубже.
Важно: предполагается использование встроенного адаптера 1-wire, не внешнего.
У кого есть работающий 1-wire? - Покажите/подскажите следующее:
1. lsusb (lspci) должны выводить что-то про адаптер? Покажите свой вывод lsusb, lspci
2. Зачем редактировать в /boot/config.txt добавлять «dtoverlay=w1-gpio-pullup,gpiopin=4,pullup=1»? Что будет если этого не сделать?
3. Говорят, что в каких-то ядрах есть бага, которая что-то ломает в 1wire. Есть инфа, какая версия 100% рабочая? Какая у вас версия ядра?
4. Я правильно понимаю, что для owfs модули ядра не обязательны?
5. У себя я вообще не нашел модулей ядра. Они как-то доставляются? Или где их взять?
6. Покажите свой owfs.conf. Интересно что писать в server:.
7. У меня датчик не видится, но есть фейковые устройства. Как их убрать?
8. Я правильно понимаю, что pullup резистор не обязателен? Есть какая-то разница в конфигурациях с резистором или без?
CC [M] /var/ramdisk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/kcl_debug.o
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.c:839:20:’ defined but not used [-Wunused-function]
static acpi_status KCL_ACPI_Slot_No_Hotplug(KCL_ACPI_DevHandle handle, u32 lvl, void *data, void **rv)
CC [M] /var/ramdisk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/kcl_ioctl.o
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:262:0:"__flush_tlb" redefined
#define __flush_tlb() native_write_cr3(native_read_cr3())
In file included from /highmem.h:26:0,
from em.h:34,
from disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:123:
/tlbflush.h:13:0:this is the location of the previous definition
#define __flush_tlb() __native_flush_tlb()
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:264:20:’
static inline void __flush_tlb_all(void)
In file included from /highmem.h:26:0,
from em.h:34,
from disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:123:
/tlbflush.h:124:20:’ was here
static inline void __flush_tlb_all(void)
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:pxchg’:
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1751:30:plicit declaration of function ‘plicit-function-declaration]
: "q"(new), "m"(*__xg(ptr)), "0"(old)
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1751:46:ent of unary ‘’)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1757:46:ent of unary ‘’)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1763:46:ent of unary ‘’)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
CC [M] /var/ramdisk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/kcl_io.o
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1749:9:emory input 2 is not directly addressable
__asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2"
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1755:9:emory input 2 is not directly addressable
__asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2"
disk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1761:9:emory input 2 is not directly addressable
__asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2"
cc1: some warnings being treated as errors
scripts/Makefile.build:258: recipe for target '/var/ramdisk/tmp/portage/x11-drivers/ati-drivers-15.12-r1/work/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o' failed
Чувствую что туплю, потому прошу помощи - просветить.
Нужно сделать константу в классе, которая представляет из себя union. Сейчас это строка в самом низу:
static const TUnion A = TUnion(1,1);
(сорри за неинформативное имя)
Компилирую так:
$ g++ -std=c++14 -ggdb -o range range.cpp
Текущий вариант кода выдает такое:
test.cpp:74:36: error: ‘constexpr’ needed for in-class initialization of static data member ‘const TRangeLocation::TUnion TRangeLocation::A’ of non-integral type [-fpermissive]
static const TUnion A = TUnion(1,1);
^
test.cpp:74:36: error: ‘constexpr TRangeLocation::TUnion::TUnion(TPointLocation::T, TPointLocation::T)’ called in a constant expression
Что ему нужно? Или вообще так нельзя?
Я ожидаю, что если я скормлю ему две единицы, то m_range константы TRangeLocation::A будет содержать 257.
#include <iostream>
#include <iomanip>
#include <cstdint> // uint8_t
#include <type_traits>
/**
* \brief Definitions of constants for describing location of point relative of range's endpoints
*
* If was decided no not using enum since a bug in gcc: when defining bitsize of enum field, gcc emits warning: http://stackoverflow.com/questions/28401851/is-it-possible-to-specify-the-bit-width-of-an-enum-in-c11
* All constants shall have same type
* MAX shall contain maximum value
*/
class TPointLocation{ /// \todo: Rename to TPointRangeLocation
public:
typedef uint8_t T; /// To let all constants have same type
static const T LEFT_FROM = 0; /// -p-f---t---
static const T EQUAL_FROM = 1; /// ---fp--t---
static const T BETWEEN = 2; /// ---f-p-t---
static const T EQUAL_TO = 3; /// ---f---tp--
static const T RIGHT_TO = 4; /// ---f---t-p-
static const T MAX = 4; /// Maximum value of all constants. Uses for static_assert.
/// \todo: think about constexpr
};
/**
* \brief Location of one range relative to another one.
*/
class TRangeLocation{ /// \todo: Rename to TRangeRangeLocation
public:
typedef uint16_t T; /// Shall fit two TPointLocation::T
/** \brief A structure just containing location information of two endpoints of the range.
*
* Used in union to construct cummulative value.
* Shall not be a bitfield, since later will use reference to it.
* Separated because a new struct cannot be defined in the union.
*/
struct TPoints{
static_assert(std::is_integral<TPointLocation::T>::value && std::is_unsigned<TPointLocation::T>::value,"TPointLocation is expected to be an unsigned integer");
//static_assert(TPointLocation::MAX < 9,"Bitfield size in not enough to store the value");
static_assert(sizeof(T)==sizeof(TPointLocation::T)*2 ,"Size of TrangeLocation: is bigger (and thus causes ambiguity) or is not enough");
TPointLocation::T from;
TPointLocation::T to;
constexpr TPoints():from(0),to(0){};
constexpr TPoints(TPointLocation::T f, TPointLocation::T t):from(f),to(t){};
};
union TUnion{
TPoints m_points; /// It is prefered to avoid constructions like m_points.from, but this is impossible
T m_range;
constexpr TUnion():m_range(0){};
constexpr TUnion(TPointLocation::T from, TPointLocation::T to):m_points(from,to){};
} m_value;
const T &m_range = m_value.m_range; /// Convenient alias
const TPointLocation::T &m_from = m_value.m_points.from; /// Convenient alias
const TPointLocation::T &m_to = m_value.m_points.to; /// Convenient alias
TRangeLocation(){};
TRangeLocation(TPointLocation::T from, TPointLocation::T to):m_value(from,to){};
TRangeLocation& operator=(TRangeLocation &&b)
{
m_value.m_range = std::move(b.m_value.m_range);
return *this;
};
static const TUnion A = TUnion(1,1);
} x;
int main()
{
return 0;
};
$ emerge -av1 kwin
...
Calculating dependencies... done!
[ebuild U ] media-libs/mesa-11.0.5::gentoo [11.0.4::gentoo] USE="classic dri3 egl gallium gbm nptl udev vaapi wayland* -bindist -d3d9 -debug -gles1 -gles2 -llvm -opencl -openmax -osmesa -pax_kernel -pic (-selinux) -vdpau -xa -xvmc" VIDEO_CARDS="(-freedreno) -i915 -i965 -ilo -intel -nouveau -r100 -r200 -r300 -r600 -radeon -radeonsi -vmware" 7 102 KiB
...
[ebuild U ] kde-plasma/kwin-5.4.95:5::kde [5.4.3:5::kde] USE="-debug -gles2 -handbook -multimedia {-test} (-wayland%)" 3 719 KiB
[...
The following USE changes are necessary to proceed:
(see "package.use" in the portage(5) man page for more details)
# required by kde-plasma/kwin-5.4.95::kde
# required by kwin (argument)
>=media-libs/mesa-11.0.5 wayland
Would you like to add these changes to your config files? [Yes/No]
То есть kwin, который без wayland, требует mesa с wayland, я все правильно понял? Это нормально?
Ситуация: выкачал одну вещь из github, нашел недостатки, подправил. Теперь хочется поделиться наработками с сообществом. Вопрос: как сделать так, чтобы мои изменения попали в исходный репозиторий?
Исходные данные: - Никогда не работал с git (работал с subversion) - Завел новый аккаунт на github - Есть измененный файл, который нужно закоммитить репозиторий (про push/pull ничего не знаю, так что «закоммитить» может и не совсем точно) - Волей случая не за линуксовой машиной, так что очень желательно все делать через браузер.
Вкратце опишите, пожалуйста, что делать, чтобы мой патч попал в основной репозиторий.
Да, и как это сделать идеологически правильно: ведь по идее ж собственник репозитория же должен решить, принимать ли мой коммит? Или кто угодно может менять файлы?
И VLAN, и MPLS - уровня 2.5, добавляют метки/теги. Так зачем параллельно существуют две технологии? Почему нельзя, например, использовать MPLS вместо VLAN? Или VLAN вместо MPLS? В чем принципиальная разница?
Есть шаблонная функция (fn в примере внизу), которая действует по-разному в зависимости от типа аргумента. Есть кастомный тип (TNew в примере внизу), который является синонимом стандартного типа unsigned char. Мне нужно чтобы функция действовала по-разному в случаях, когда ей передается стандартный тип или кастомный. C++ же воспринимает кастомный тип как синоним стандартного, и не дает специфицировать функцию.
В общем, проще на примере.
Код внизу не компилируется, так как компилятор трактует void fn(const unsigned char &arg) void fn(const TNew &arg) как одно и то же. А нужно, чтобы он различал эти функции/типы.
У кого-то работает видео в youtube в otter browser? У меня черный экран, звук идет, картинки если навести на перемотку показывает. HTML5 (не flash). Такое впечатление, что нет кодеков, но каких?
Шаманю с трансляцией скан-кодов в keycodes. setkeycodes работает. Но интересно бы посмотреть дефолтную таблицу связок scancodes -> keycodes.
Интернет советует 2 вещи: - evtest. Но он показывает не все. В частности, мою клавиатурную кнопку Power (scancode=0xde) не показывает. - showkeys . Но он показывает нажатую кнопку. Мне что, его запускать и все кнопки по очереди нажимать?
После обновления Xorg и/или драйверов при переключении на виртуальный терминал показывается черный экран. Возврат в граф. среду с помощью Ctrl+Alt+F7 работает нормально.
Я такое замечал ранее, откатывался маскировкой следующего:
Подозреваю, что с тех пор что-то поменялось. Например, в мане по ebuild нахожу такие вещи как setup, prepare, configure, test, которые, подозреваю, как-то должны вписываться в общий процесс.
В идеале получить бы ссылку на официальную документацию, где описана актуальная информация.
Заговорили с товарищем про разницу switch, L3 switch, router. Я вроде эту тему понимаю. Но после общения, погуглив, я не нашел подтверждения некоторым своим мыслям. Потому прошу достопочтенное общество подтвердить/опровергнуть следующие утверждения относительно L3 switch. 1. Его портам не нужно назначать отдельных IP адресов (management IP не в счет). Те IP адреса (подсети), которые назначены на его порты, это адреса других устройств. Или: если есть сеть из двух хостов соедененных L3 switch'ем, такой сети достаточно двух IP адресов (management IP не в счет). 2. Его нельзя пингануть по прортам (management IP не в счет) 3. Он не подменяет MAC адреса пакетов. То есть пакет, пройдя L3 switch, будет все равно иметь MAC адреса отправителя/получателя - хостов или соотв. ближайших шлюзов, но не L3 switch'a. 4. На хостах ARP таблица будет содержать MAC адреса других хостов/рутеров, но L3 switch там никак себя не засветит (management IP не в счет).
Собственно, всё это базируется на утверждении, что это все еще L2 устройство (точнее устройство уровня ниже L3, если считать VLAN уровнем 2.5) абсолютно прозрачное для уровня L3 (IP).
Верно?
Ответ: Нет, не верно. Функционально L3 switch = полноценный router. В исполнении, у него меньше функций, чем у классического (с точки зрения предложений на рынке) рутера, где-то меньше ресурсов, но он очень быстрый. Его сегмент применения - маршрутизация между VLAN'ами. Детальней здесь: L3 switch (комментарий)