Что-то вроде этого?
#!/bin/bash
if [ $# -ne 2 ]; then # $# - is a number of arguments if its not equal (-ne) to 2 then we print message below and exit script
echo ${0}" [gzip|bzip2|xz] "
echo -e "\tProgram will create backup of users home directory"
exit 0 # 0 is a return code of script
fi
case $1 in # $1 is first argument of script and case statement runs code depending of its content. for example: if $1 is equal to "gzip" then set method to "z"
"gzip" )
method="z" ;;
"bzip2" )
method="j" ;;
"xz" )
method="J" ;;
*)
# if $1 is none of above then run this
echo "Wrong method [gzip|bzip2|xz]"
exit 1 # and exit with return code 1 which means error
;;
esac
if [ ! -d /home/$2 ]; then # id not(!) existing directory(-d) /home/login ($2 is the second argument of script) then
echo "User not exists"
exit 1
fi
tar -${method} -cf ${2}_$(date +%F).tar.${1} /home/${2}
Это можно было бы сделать лучше и короче, но этот код позволяет кое-чему научиться. Дополнительную информацию о tar можно найти здесь: http://linux.die.net/man/1/tar
Я не пользуюсь Arch Linux, поэтому я немного рискую.
В статье, на которую вы ссылаетесь, указано, что это отсутствующая символическая ссылка, а не отсутствующий пакет. Это имеет смысл, потому что обычно в Linux общие библиотеки будут иметь по крайней мере два октета номера версии после «.so», а в ошибке упоминается только один.
Я предлагаю вам бежать
ls -l /usr/lib/libidn2.so*
и посмотрите, что он возвращает. Если он просто возвращает
/usr/lib/libidn2.so
и не упоминает ничего более конкретного, я бы рекомендовал запустить
ln -s /usr/lib/libidn2.so /usr/lib/libidn2.so.0
ln -s /usr/lib/libidn2.so /usr/lib/libidn2.so.4
Я предлагаю запустить обе программы, потому что кажется, что ваша программа ищет четвертую основную версию библиотеки, а статья, на которую вы ссылаетесь, ищет основную нулевую версию. Это исправление в основном создает два псевдонима для файла /usr/lib/libidn2.so, один с.0 и один с.4.
Если вы видите файл /usr/lib/libidn2.so.something.something,и /usr/lib/libidn2.so является символической ссылкой на него, может иметь смысл использовать символическую ссылку на более конкретный файл. Я действительно не знаю, какой путь обязательно будет лучшим.
Другой вариант для вас — понизить версию libidn2 до той, которая была до этой проблемы.
Что касается того, как это могло произойти -, похоже, что сопровождающий libidn2 для Arch Linux допустил ошибку. Меня смущает не то, что это вообще произошло, а... эта ошибка была добавлена 12 дней назад. На исправление ошибки, которую можно просто исправить с помощью символических ссылок вручную, уйдут часы, а не недели. Я не хочу умалять тех, кто занимается сопровождением Arch Linux; Я понятия не имею, что происходит с их стороны. Это просто... расстраивает. Я предполагаю, что это только вершина айсберга этой истории. В любом случае люди есть люди, и все мы ошибаемся. Кто-то, наверное, уже корит себя за это, и им для этого не нужна наша помощь.
Так как подобные ошибки часто возникают в Arch Linux, я написал специальный скрипт для анализа пакетов и определения правильности их сборки. (В 95% случаев пакет Arch Linux собран корректно):https://github.com/eli-schwartz/dotfiles/blob/master/bin/pkg-list-linked-libraries
Выполнение этого в пакете инструментов bind -и поиск libidn2 показывает, что последняя версия инструментов bind -связана с libidn.so.4:
$ pkg-list-linked-libraries bind-tools libidn2
==> checking linked libraries for bind-tools-9.13.5-4-x86_64.pkg.tar.xz...
/usr/bin/dig
NEEDED libidn2.so.4
/usr/bin/host
NEEDED libidn2.so.4
/usr/bin/nslookup
NEEDED libidn2.so.4
Откуда взялась эта библиотека?
$ pacman -Qo /usr/lib/libidn2.so.4
/usr/lib/libidn2.so.4 is owned by libidn2 2.1.0-1
Пакет инструментов bind -в Arch требует наличия пакета libidn2 в качестве зависимости, в соответствии с выводом pacman -Si bind-tools
, что хорошо, поскольку он зависит от него.
Версии двух пакетов в официальных репозиториях Arch Linux на момент написания этой статьи соответствуют версии инструментов bind -и libidn2, которую я проверил выше:
$ expac -S '%n %v' libidn2 bind-tools
libidn2 2.1.0-1
bind-tools 9.13.5-4
Итак, у вас установлена последняя версия инструментов -. Но вы утверждаете, что у вас нет библиотек libidn2, необходимых для двоичных файлов. Почему бы нет? Какая у вас сейчас установлена версия libidn2? Проверьте вывод pacman -Q libidn2
.
Поскольку этот пакет работает у тысяч других людей, я пришел к выводу, что ваша система не работает, и вам необходимо правильно обновить систему, чтобы установить последнюю версию libidn2. См.https://wiki.archlinux.org/index.php/System_maintenance#Partial_upgrades_are_unsupportedдля получения подробной информации о том, почему это может произойти, что нужно сделать, чтобы исправить это, и почему символические ссылки не только не являются решением, но еще больше сломают вашу систему.
Что касается ошибки Parabola, то это прямо противоположная проблема. Совершенно другой дистрибутив Linux, который , а не Arch Linux, не смог пересобрать свои пакеты с использованием нового libidn2, и в результате эти пакеты были ошибочно связаны с libidn2.so.0
.Если вы действительно страдаете от этой ошибки Parabola, значит, вы вообще не используете Arch Linux, и вам нужно указать, что вы на самом деле используете Parabola, иначе люди не будут знать, как вам помочь.