Szkriptek: Python, Perl, Bash, ...

Perl File::Copy ERROR

Szeretném egy állományban (T.txt) letárolt file nevek alapján a file-okat másolni.
Teszem ezt így:
# Perl 5.8.8 version on Debian
#!/usr/bin/perl

use File::Copy;
use Cwd;
use strict;

chdir ("/Dir_PATH");

my $basedir = "/Dir_PATH";
my $TFILE = "$basedir/T.txt";
my $line = "";
my $cwd = getcwd();
#print "$cwd\n";
open(FILE, "$TFILE") or die("Could not open $LOGFILE file.");
foreach $line () {
my $dircopy = "$basedir/COPY/$line";
#print "$line\n";
copy ($line, $dircopy);
#system ("cp $line $dircopy");
}
close (FILE);

Ez lesz belőle:

Unsuccessful stat on filename containing newline at /usr/share/perl/5.8/File/Copy.pm line 85, line 3.
at /usr/share/perl/5.8/File/Copy.pm line 85
File::Copy::copy('filename.jpg\x{a}', '/Dir_PATH/COPY/filename.jpg\x{a}') called at ./masolda.perl line 18
Unsuccessful stat on filename containing newline at /usr/share/perl/5.8/File/Copy.pm line 95, line 3.
at /usr/share/perl/5.8/File/Copy.pm line 95
File::Copy::copy('filename.jpg\x{a}', '/Dir_PATH/COPY/filename.jpg\x{a}') called at ./masolda.perl line 18
Unsuccessful open on filename containing newline at /usr/share/perl/5.8/File/Copy.pm line 122, line 3.
at /usr/share/perl/5.8/File/Copy.pm line 122
File::Copy::copy('filename.jpg\x{a}', '/Dir_PATH/COPY/filename.jpg\x{a}') called at ./masolda.perl line 18
main::(./masolda.perl:16): my $dircopy = "$basedir/COPY/$line";

Rendszer híváson keresztüli cp-vel sem jobb a helyzet:
system ("cp $line $dircopy");

cp: missing destination file operand after `filename.jpg'
Try `cp --help' for more information.
sh: line 1: /Dir_PATH/COPY/filename.jpg: No such file or directory
main::(./masolda.perl:16): my $dircopy = "$basedir/COPY/$line";

Viszont ha nem listából olvasva, hanem manuálisan etetem a copy / system cp függvényt akkor minden OK !?!?!?

Valamit benézek? system cp / copy függvény nemképes listából olvasva működni?
Rossz a módszer?

Köszi a szakértést!

bash script több nyelven

Készítettem egy scriptet, és szeretném ha több nyelven is elérhető lenne, ha egy lang változó átállításra kerül a config fájlban.
Jelenleg ezt úgy oldottam meg hogy van a lang fájl, és abban String001="valami szöveg" van.
Igen ám, de így egészen átláthatatlan a script, mert nem tudom hogy mi hová tartozik.
Például:

while true; do
echo -n "${Cyan} ${String056} (y/n) "
read answer || break
answer_control_yn
error_level
done
if [ "${answer}" = "n" ]; then
echo -e "${Red} ${String057} ${NC} \n \r"
sound_mute
exit
fi

Miként lehet ezt elegánsabban megoldani? Nem beszélve arról hogy ez a sok változó nincs-e hatással a teljesítményre, illetve van-e valami maximum amivel még elbír a rendszer? A c és társaihoz nem értek.

[Megoldva] awk kérdés

Van ez a részlet egy mencoder végén.

mencoder blabla
-o ${movie_path}_${_date}.avi 2>${movie_path}_${_date}_error.log | tee ${movie_path}_${_date}_message.log | awk -vFS='s' -vRS='\r' -vORS='\r' '/^Po/ {print " A felvétel aktuális ideje [mp]" $2}'

A kérdés hogy ez a szöveg: A felvétel aktuális ideje [mp] lehet-e valamilyen formában egy változóban?

Például: szoveg="A felvétel aktuális ideje [mp]"

Tehát csak a vége
'/^Po/ {print " ${szoveg}" $2}'

Az biztos hogy így nem működik.

cd-rom állapot lekérés

Sziasztok!

Olyan kérdésem lenne hogy hogyan tudnám lekérdezni/feldolgozni azt hogy melyik cdrom egység tartalmaz lemezt.
A gépben több cd egység is található. Az eredményt parancsfájlban szeretném feldolgozni.
Én kezdőként a hwinfo awk párossal próbálkozom. Bármely más vagy konkrét használható megoldást szívesen veszek.
itt tartok:
xxxx:/home/user # hwinfo --cdrom | awk '/CD-ROM/ {print $1} ; /\/dev\/cdrom/ {print $3} ; /Drive status:/ {print $3}'
47:
/dev/sr0,
48:
/dev/sr1,
no

az építő válaszokat előre is köszönöm!

Keyboard Shortcut küldése scriptből

Sziasztok!

Igazából azt sem tudom, hogy merre induljak el, ezért kérdezlek Titeket.
Van egy Linux-os kiosk-om, minden szép és jó, kivéve, hogy a felhasználók legtöbbször úgy hagyják ott ahogy kedvük van. Persze nem kritikus probléma, csak a kalandvágy kedvéért:
- lehetne-e parancssorból X-es alkalmazásnak (chromium) billentyű lenyomást küldeni (ALT + HOME)? Ha igen, mivel? *
- lehet e valahogy az xscreensaver-nek külső parancsot beállítani, avagy lehet e az egér inaktivitás függvényében scriptet indítani? Ha igen, mivel? **

Azt szeretném, hogy ha huzamosabb ideig (x perc) nem használja senki (nincs egérművelet), akkor a chromium töltse be a kezdőoldalt.

Köszi!

*:
első kérdésemre a válasz: xdotool search --onlyvisible --class "chromium-browser" windowactivate --sync key --clearmodifiers alt+Home
**:
lx által javasolt megoldás működhet, viszont nálam a teszt rendszeren valamiért az xscreensaver elsötétíti a képernyőt, akármi állítok neki. Kerülőmegoldás: xprintidle -vel lehet az x inaktivitást nyomon követni, innen már egyenes út vezet az egyszerű bash scriptig és cronig.

shell levágás

Üdv!
Shell scriptben hogyan tudnám azt elérni, hogy mindent ilyen formában tudjak kiírni:

abc/def/xyz

és ne így:

./abc/def/xyz

már próbálkoztam sed-el, awk-al, cut-al, egyik sem jött be, teljesen tanácstalan vagyok, minidg csak a végéből sikerült levágnom a ./ -t soha.

Előre is köszönöm a tanácsokat

[Megoldva] Bash scriptelés, string eltávolítás

Sziasztok!

Van egy olyan problémám, hogy egy log fájlból kellene bash scriptel kiszedni bizonyos részeket.
A részek < és > karakter között vannak. A < és > karakterekkel együtt kellene eltávolítanom.
Arra gondoltam, hogy egy tömbszerűségben meg lehetne adni azokat a részeket amiket ki akarok szedni, és a végeredményt egy másik fájlba menteném.

Ha valaki tudna segíteni, megköszönném.

Python attribútumok öröklődése

Sziasztok!

Némi elméleti segítség kéne, hogy hogyan is kell Pythonban gondolkodni. Egész eddigi életemben vagy statikus típusrendszerű, erősen típusos nyelvekben programoztam, vagy olyan nyelven, ahol amúgy sem nagyon lehet ellenőrizgetni a paramétereket (Perl, Bash, stb.). Szóval nehezen megy az átállás a Contract Based Developmentről a Test Driven Development Pythonos verziójára, ahol Duck Typeing van + sok unit teszt.

Most éppen az elnevezéseken akadtam el, konkrétan a visibility kifejezésén: azt még elviselném, hogy a protected fv-eket '_'-sal jelezzem, a privátokat '__'-sal, mert meglepő módon ez nem sokat ront az olvashatóságon. Viszont sajnos az attribútumok is alapból védtelenek a származtatott osztályokkal szemben, így egy


self.msg = valami

egy osztályban ki tudja mit jelent. Például a következő kódban:


from __future__ import print_function


class Base(object):
    def __init__(self):
        self.msg = "Base msg"

    def printMsg(self):
        print(self.msg)


class Derived(Base):
    def __init__(self):
        super(Derived, self).__init__()
        self.msg = "Derived msg"


b = Base()
b.printMsg()

d = Derived()
d.printMsg()

Kimenet:


Base msg
Derived msg

A probléma csak úgy oldódik meg, ha

self.__msg

-t írok mindenhova. Mivel egy osztályhierarchia tervezésénél a legtöbb attribútum privát szokott lenni (alkalmanként egy-egy protected), most akkor Pythonban minden attribútumot is húzogassak alá kétszer?!

Ha nem lenne világos, most nem az attribútumok kliensek általi láthatósága a problémám, hanem a származtatott osztályokkal szembeni védelem. A rövid, kifejező attribútumnevek gyakran felbukkannak újra meg újra, képtelenség, hogy nagyobb osztályhierarchia esetén ne legyen névütközés. Ez pedig nagy probléma, mert anélkül változtatja meg az ősosztály viselkedését, hogy annak bármelyik függvényét felüldefiniálnám.

A Python guruk hogy birkóznak meg ezzel?

Python: E-mail címek

Van egy e-mail címeket tartalmazó fájlom. Addig eljutottam, hogy tömbbe rendeztem őket. Rengeteg hibás e-mail cím van a listában. Hogyan tudom ezeket javítani? A szóközöket már kitudtam venni a címekből, ami kellene még:

  1. Nagybetűket kisbetűkre alakítani.
  2. Ékezetes karaktereket átalakítani (angol ABC).
  3. Speciális karaktereket törölni.

... vagy nem kell átkonvertálni csak egyszerűen ismerje fel, hogy valós vagy sem az e-mail cím.

Kezdő programozó vagyok. A segítséget előre is köszönöm.

csillag az argumentumokban

Régi tervem, hogy írok egy kis scriptet ami roppant rövid email -ket küld nekem, lokálisan (exim4 smart host). A levelek és a küldési időpont a crontab bejegyzéseihez hasonlítana, így valahogy:
* 03 07 08 * tovis@localhost "Tamás névnap" "Tamás barátom"

A mezők sorban: év,hó,nap,óra,perc,címzett,téma,tartalom
Ezek amolyan emlékeztetők lennének. Eddig jutottam:


check_stamp()
{
  # itt kellene az időt ellenőríznem
}
grep -v '^#' $1 | while read ROW
do
  check_stamp $ROW
done

A dolog jól is menne (a check_stamp $1=év $2=hó stb. megkapja) ha nem lennének a definícióban csillagok, ezeket a shell szépen behelyettesíti az adott könyvtárban lévő fájlok nevével :(
Persze használhatnék valami mást a csillag helyett - mondjuk '-' - de szeretném megőrizni a "konvenciókat". Van valami ötlet hogy lehetne rávenni a shell -t, hogy átmenetileg NE értelmezgesse az argumentumokat? Ha az egész sort ($ROW) idézőjelekbe teszem, akkor ott vagyok ahonnan indultam a check_stamp az egész sort megkapja, így épp semmi értelme. Talán mezőnként és awk? - jó hosszú lesz a script csak emiatt, nem túl "elegáns". Viszont minden csillagot = bármi, behelyettesíthetném az aktuális értékkel (év, hó, nap stb.).
Esetleg sed? - minden csillagot a sorban lecserélni. Talán még ez a legjobb. Tudtok valami más tippet?