Когда-то доработал скрипт распаковки .deb пакетов в nautilus. В ubuntu 9.04-9.10 прекрасно работает, а вот в 10.04 отказался работать, даже не выводится путь для распаковки... Уже всю голову сломал, немогу понять что нужно исправить чтоб работало в LTS.
#!/bin/bash
#
# Version: теперь незнаю
#
# Info: Скрипт наутилуса предназначен для распаковки, установки .deb-пакетов и получения информации о них.
#
# Distributed under the terms of GNU GPL version 2 or later
#
# Copyright (C) Pontus Ullgren <pontus-a-ullgren.com>
#
# Перевод и доработка MaxMelekin@gmail.com
#
# Скрипт положить в ~/.gnome2/nautilus-scripts/Ваша папка/
#
# Внимание! Скрипт не понимает пути к файлу, кот. содержит пробел.
#
# Credits goes to Keith Conger for his super-extractor Nautilus script which I used as
# a template.
#
#------------------------------------------------------------------------------------------------------------
#
FILE_TYPE=$(file -b $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS|awk '{ print $1}')
MIME_TYPE=$(file -b $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
#
#------------------------------------------------------------------------------------------------------------
#
DEFAULT_DIR="./"`basename $1 .deb`
DPKG_PATH=/usr/bin
TEMP_FILE=`tempfile`
XTERMPRG=/usr/bin/X11/xterm
#
#----------Запрос что фай=DEB, (иначе получаем окно ошибки)--------------------------------------------------
#
if [ "$FILE_TYPE" != "Debian" ]; then
zenity --error --title "Файл не поддерживается" --text "$1 Файл не является DEB пакетом, или путь к нему содержит пробелы.
It is reported as: $MIME_TYPE ($FILE_TYPE)" 2>&1
exit -1;
fi
#
#----------Окно диалога выбора действий (если файл DEB-пакет и путь к нему не содержал пробелы)--------------
#
TODO=$(zenity --list --radiolist --column "" --column "Сортировать:" TRUE "Распаковать для последующей упаковки" FALSE "Вывести инфо о пакете" FALSE "Извлечь управляющую информацию" FALSE "Извлечь файлы пакета" FALSE "Установить пакет" FALSE "Справка по dpkg-deb" --width=320 --height=300 2>&1)
#
#__________"Правильно" распаковать пакет, т.е. извлечь управляющую информацию и файлы пакета_________________
#
if [ "$TODO" = "Распаковать для последующей упаковки" ]; then
DIR=$(zenity --title "Распаковать в..." --entry --text "Путь извлечения:" --entry-text "$DEFAULT_DIR" --width=500 2>&1)
if [ $DIR ]; then
mkdir $DIR
$DPKG_PATH/dpkg-deb --control $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/DEBIAN > $TEMP_FILE
$DPKG_PATH/dpkg-deb --vextract $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/ > $TEMP_FILE
zenity --text-info --title "Лог распаковки" --filename $TEMP_FILE --width=500 --height=500 2>&1
rm $TEMP_FILE
else
zenity --error --title "Действие отменено" --text "Распаковка отменена пользователем." 2>&1
fi
#
#__________Вывасти на дисплей список файлов упр. инфо и описание из файла "control"__________________________
#
elif [ "$TODO" = "Вывести инфо о пакете" ]; then
$DPKG_PATH/dpkg-deb --info $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS > $TEMP_FILE
zenity --text-info --title "Инфо о пакете $1" --filename $TEMP_FILE --width=500 --height=500 2>&1
rm $TEMP_FILE
#
#__________Извлечь только упр. инфо (файл "control", "md5.", скрипты установки, удаления и т.д.)_____________
#
elif [ "$TODO" = "Извлечь управляющую информацию" ]; then
DIR=$(zenity --title "Извлечь инфо в..." --entry --text "Путь извлечения:" --entry-text "$DEFAULT_DIR" --width=500 2>&1)
if [ $DIR ]; then
mkdir $DIR
$DPKG_PATH/dpkg-deb --control $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/ > $TEMP_FILE
rm $TEMP_FILE
else
zenity --error --title "Действие отменено" --text "Извлечение отменено пользователем." 2>&1
fi
#
#__________Извлечь только файлы программы и их полные пути___________________________________________________
#
elif [ "$TODO" = "Извлечь файлы пакета" ]; then
DIR=$(zenity --title "Извлечь файлы пакета в..." --entry --text "Путь распаковки:" --entry-text "$DEFAULT_DIR" --width=500 2>&1)
if [ $DIR ]; then
mkdir $DIR
$DPKG_PATH/dpkg-deb --vextract $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/ > $TEMP_FILE
zenity --text-info --title "Лог распаковки" --filename $TEMP_FILE --width=500 --height=500 2>&1
rm $TEMP_FILE
else
zenity --error --title "Действие отменено" --text "Распаковка отменена пользователем." 2>&1
fi
#
#__________Установить пакет (откроется окно "страшного" (в прямом смысле) терминала)_________________________
#
elif [ "$TODO" = "Установить пакет" ]; then
echo "#!/bin/sh" > $TEMP_FILE
echo "/bin/su -c "$DPKG_PATH/dpkg --install $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"" >> $TEMP_FILE
echo "echo Press enter to exit ..." >> $TEMP_FILE
echo "read" >> $TEMP_FILE
$XTERMPRG -T "Installing $1" -e /bin/sh $TEMP_FILE
rm $TEMP_FILE
#
#__________Справка по dpkg-deb_______________________________________________________________________________
#
elif [ "$TODO" = "Справка по dpkg-deb" ]; then
$DPKG_PATH/dpkg-deb --help $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS > $TEMP_FILE
zenity --text-info --title "Справка" --filename $TEMP_FILE --width=500 --height=500 2>&1
rm $TEMP_FILE
#
#__________------------------------------------------________________________________________________________
#
fi
Пользователь решил продолжить мысль 04 Декабря 2010, 16:09:30:
Впринципе из всего скрипта пользуюсь только одной секцией
#!/bin/bash
#
#
#------------------------------------------------------------------------------------------------------------
#
DEFAULT_DIR="./"`basename $1 .deb`
DPKG_PATH=/usr/bin
TEMP_FILE=`tempfile`
#
DIR=$(zenity --title "Распаковать в..." --entry --text "Путь извлечения:" --entry-text "$DEFAULT_DIR" --width=500 2>&1)
if [ $DIR ]; then
mkdir $DIR
$DPKG_PATH/dpkg-deb --control $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/DEBIAN > $TEMP_FILE
$DPKG_PATH/dpkg-deb --vextract $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/ > $TEMP_FILE
zenity --text-info --title "Лог распаковки" --filename $TEMP_FILE --width=500 --height=500 2>&1
rm $TEMP_FILE
else
zenity --error --title "Действие отменено" --text "Распаковка отменена пользователем." 2>&1
fi
#
В ubuntu 9.10 она прекрасно работает, а в 10.04, увы... как всегда что-то сломали. При подтверждении выбивает последняя секция zenity --error. Как это исправить, ума не приложу. Плюс при выборе секций тоже ничего не происходит в скрипте под сполером. Кто знает что произошло?
Пользователь решил продолжить мысль 04 Декабря 2010, 18:46:44:
странные вещи происходят в LTS, вывел резултаты условия в лог файл, чертовщина получается
#!/bin/bash
#
#
#------------------------------------------------------------------------------------------------------------
#
DEFAULT_DIR="./"`basename $1 .deb`
DPKG_PATH=/usr/bin
TEMP_FILE=`tempfile`
#
DIR=$(zenity --title "Распаковать в..." --entry --text "Путь извлечения:" --entry-text "$DEFAULT_DIR" --width=500 2>&1)
if [ $DIR ]; then
mkdir $DIR
$DPKG_PATH/dpkg-deb --control $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/DEBIAN > $TEMP_FILE
$DPKG_PATH/dpkg-deb --vextract $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $DIR/ > $TEMP_FILE
zenity --text-info --title "Лог распаковки" --filename $TEMP_FILE --width=500 --height=500 2>&1
else
echo $DIR > /home/maks/test/log
fi
#
вот результаты лога при даже если ответ положительный, при отрицании тоже самое получается
/usr/share/themes/Human/gtk-2.0/gtkrc:85: Murrine configuration option "gradients" is no longer supported and will be ignored.