Nautilus/Caja skrypt bash


(macios4) #1

Mam pewien skrypt w BASHu który konwertowałby plik pdf na jpg, ulokowany w katalogu ~/.config/caja/scripts. Po kliknięciu PPM na dany plik, wybierając skrypt uruchamiałby się w terminalu, ponieważ trzeba tam wprowadzić określone zmienne. Kod:

#!/bin/bash
filesall=""
while [$# -gt 0]
	do
		files=`echo "$1" | sed 's/ /\?/g'`
		filesall="$files $filesall"
		shift
	done
mate-terminal -e "bash -c \"echo Podaj rozdzielczość konwersji; read rozdz; convert -density $rozdz "${files}" "${files%.*}".jpg; exec bash\""&

Problem jednak w tym, że skrypt ten po podaniu zmiennej określającej rozdzielczość nie widzi jej (read rozdz). Jak to naprawić?


(nintyfan) #2

Problem w użytych cudzysłowiach - te obejmujące komendę do wykonania przez mate-terminal. W bashu cudzysłowia podwójne działają chyba tak, jak w PHP. Natomiast zastosowanie cudzysłowiu pojedyńczego powinno pomóc.


(macios4) #3

Zmieniłem te główne cudzysłowia na pojedyncze ale terminal nawet sie nie włączył, tylko mignął na ułamek sekundy. Mógłbyś napisać komendę w kodzie jak to powinno wyglądać? I ewentualnie sprawdzić czy napewno zadziała.


(nintyfan) #4

Musisz także usunąć znaki backslash() przed podwójnymi cudzysłowiami - mój błąd.

konsole -e 'bash -c "echo Podaj rozdzielczość konwersji; read rozdz; echo $rozdz"'

Powyższy kod u mnie działa.


(macios4) #5

Dzięki:) Po paru modyfikacjach skrypt prezentuje się następująco:

#!/bin/bash

filesall=""
while [$# -gt 0]
	do
		files=`echo "$1" | sed 's/ /\?/g'`
		filesall="$files $filesall"
		shift
	done

if [["$files" =~ \.pdf]]
then
       mate-terminal -e 'bash -c "echo Konwersja pliku PDF do JPG; echo Wybrałeś plik '$files'; echo Podaj rozdzielczość [np. 100 lub 200]; read den; echo Podaj zakres stron [np. 1 lub 1-10]; read pag; echo Czekaj, pracuję...; convert -density $den '$files'[$pag] '$files'.jpg; echo OK. Do zobaczenia...; sleep 2"';

else
       zenity --warning --text "Ten skrypt obsługuje TYlko pliki PDF!";
fi
done;

Niestety po konwersji plik zawiera podwójne rozszerzenie - np. plik.pdf.jpg - a powinien plik.jpg - Jak to zmienić?


(kostek135) #6

Wziąć napis, prze-iterować literka po literce od tyłu do czasu spotkania kropki. Odciąć wszystko z kropką włącznie. Dopiero potem dokleić nowe rozszerzenie.


(macios4) #7

łatwo się mówi zrób to czy tamto:))

A mógłbyś podać odpowiedni kod?


(kostek135) #8

Łatwo się mówi, podaj mi odpowiedni kod


(nintyfan) #9

Do usunięcia rozszerzenia możesz skorzystać ze specjalnego sposobu podstawiania zmiennych. W twoim przypadku do usunięcia ostatniej kropki wszystkiego po niej możesz skorzystać z poniższego sposobu:

${a%.*}

Ponieważ ty jednak masz zmienną przechowującą wiele nazw plików, to lepiej użyć sed-a, czyli

sed 's/\.pdf$//g' | sed 's/\.pdf / /g'

Może nie działać, bo piszę z głowy.