Используйте awk с флагом -F
. Вам придется использовать эхо и канал в awk вот так:
for line in `cat /etc/group`
do
col1=$(echo $line | awk -F':' '{print $1}')
col2=$(echo $line | awk -F':' '{print $2}')
# Then you can use col1, col2, etc...
echo "column 1 = $col1"
echo "column 2 = $col2"
done
Можно изменить управляющие файлы бинарных пакетов из хука --hook-buildinfo
, который вызывается сразу после вызова debian/rules build
, используя dpkg-deb
для их распаковки/переупаковки.
#!/bin/bash
#
# deb_insert_meta.sh
#
# Inserts CI metadata into all deb files in parent directory
# Intended for use with:
# `dpkg-buildpackage --hook-buildinfo='fakeroot deb_insert_meta.sh'`
# which is the first hook after the binary deb files are generated
# but before checksums for.changes are calculated
# Should be called with 'fakeroot' so that the repacked binaries
# have their content/control ownership/permissions preserved.
pushd.. > /dev/null || exit 1
for deb_file in *.deb; do
[ -e "$deb_file" ] || continue
DEB_TMPDIR=$(mktemp -d)
if [ -z "${DEB_TMPDIR}" ]; then
echo "Failed to create a temporary work directory"
exit 1
fi
dpkg-deb -R "${deb_file}" "${DEB_TMPDIR}"
if [ -e "${DEB_TMPDIR}/DEBIAN/control" ]; then
if [ -n "${CI_PROJECT_PATH}" ]; then
echo "Git-Repo: ${CI_PROJECT_PATH}" >> "${DEB_TMPDIR}/DEBIAN/control"
fi
if [ -n "${CI_COMMIT_SHA}" ]; then
echo "Git-Hash: ${CI_COMMIT_SHA}" >> "${DEB_TMPDIR}/DEBIAN/control"
fi
if [ -n "${CI_COMMIT_BRANCH}" ]; then
echo "Git-Branch: ${CI_COMMIT_BRANCH}" >> "${DEB_TMPDIR}/DEBIAN/control"
fi
dpkg-deb -b "${DEB_TMPDIR}" "${deb_file}"
fi
rm -rf "${DEB_TMPDIR}"
done
popd > /dev/null || exit 1
exit 0
Похоже, основная проблема заключается не во всех случаях debian/control
. Исправление этого — всегда начинать с исходных пакетов, поскольку они должны предоставлять файл debian/control
. Любой другой подход будет включать в себя запуск части сборки напрямую, поскольку dpkg-buildpackage
требует debian/control
; например, вы можете запустить debian/rules build
, а затем исправить debian/control
(, который должен существовать на данный момент ), перед запуском debian/rules binary
(, создающим бинарные пакеты ).
Чтобы контролировать, что входит в файл control
двоичных пакетов, вы также можете добавить параметры для dpkg-gencontrol
, , например. с помощьюdh_gencontrol
:
override_dh_gencontrol:
dh_gencontrol -- -Dfoo=bar
добавит запись Foo: bar
в файлы бинарных пакетов control
. Это, вероятно, более полезно в вашем сценарии.
Для этого вам нужно изменить debian/rules
; вы можете использовать dh_gencontrol
, как указано выше, или dpkg-gencontrol
напрямую, если пакет не использует dh
.