Dela med dig av dina egna script/*sh-tips
Re: Dela med dig av dina egna script/*sh-tips
Allright. Jag trodde att eftersom >> appendar så skapar den heller ingen fil om målfilen inte existerar. Antar att det står någon notis om detta i dokumentationen dock.
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
ǁ Q: Why is top posting so bad?
-
- Inlägg: 4164
- Blev medlem: 19 jan 2008, 13:52
- OS: Debian
Re: Dela med dig av dina egna script/*sh-tips
Du får gärna tala om vad det är bra för också.

ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
ǁ Q: Why is top posting so bad?
-
- Inlägg: 4164
- Blev medlem: 19 jan 2008, 13:52
- OS: Debian
Re: Dela med dig av dina egna script/*sh-tips
Det har med OpenGL shaders att göra..dmz skrev:Du får gärna tala om vad det är bra för också.
Hitta det här:
http://www.youtube.com/watch?v=u9qVPpeK ... re=related
Kolla i övre högra hörnet..(i boxen alltså)
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Dela med dig av dina egna script/*sh-tips
sh-manualblad från tidigt 70-tal:dmz skrev:Allright. Jag trodde att eftersom >> appendar så skapar den heller ingen fil om målfilen inte existerar. Antar att det står någon notis om detta i dokumentationen dock.
Kod: Markera allt
An argument of the form ">>arg" causes file "arg" to be
used as the standard output for the given command. If
"arg" did not exist, it is created; if it did exist, the
command output is appended to the file.
Kod: Markera allt
>> word
Open file word for writing in append mode as standard output.
If the file does not exist, and the CLOBBER option is unset,
this causes an error; otherwise, the file is created.
>>| word
>>! word
Same as >>, except that the file is created if it does not
exist, even if CLOBBER is unset.
Re: Dela med dig av dina egna script/*sh-tips
Tack!
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
ǁ Q: Why is top posting so bad?
- bbauto
- Inlägg: 1594
- Blev medlem: 11 dec 2006, 17:58
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Bromölla
Re: Dela med dig av dina egna script/*sh-tips
Ett litet Nautilus script:
Installera prefixsuffix från förråden...
PS! Sökvägen uppdateras inte som den ska förs man väljer Folder path: Choose->Select
prefixsuffix har visat sig ha sina begränsningar, så gjort en liknande för pyrenamer...
PyRenamer:
Kod: Markera allt
#!/bin/bash
#Nautilus script Rename with prefixsuffix
base="`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d'/' -f3- | sed 's/%20/ /g'`"
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
dir="$base"
else
while [ ! -z "$1" -a ! -d "$base/$1" ]; do shift; done
dir="$base/$1"
fi
if test -f "$dir/.rename_tmp/.exists"
then
echo "Exists!"
else
mkdir "$dir/.rename_tmp"
touch "$dir/.rename_tmp/.exists"
fi
IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
if [ -f "$file" ]; then
cp $file "$dir/.rename_tmp/"
fi
done
cd "$dir/.rename_tmp"
prefixsuffix $@
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
if [ -f "$file" ]; then
rm $file
fi
done
mvfiles="$dir/.rename_tmp/*"
mv $mvfiles "$dir/"
rm "$dir/.rename_tmp/.exists"
rmdir "$dir/.rename_tmp"
PS! Sökvägen uppdateras inte som den ska förs man väljer Folder path: Choose->Select
prefixsuffix har visat sig ha sina begränsningar, så gjort en liknande för pyrenamer...
PyRenamer:
Kod: Markera allt
#!/bin/bash
#Nautilus script Rename with pyrenamer
base="`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d'/' -f3- | sed 's/%20/ /g'`"
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
dir="$base"
else
while [ ! -z "$1" -a ! -d "$base/$1" ]; do shift; done
dir="$base/$1"
fi
if test -f "$dir/.rename_tmp/.exists"
then
echo "Exists!"
else
mkdir "$dir/.rename_tmp"
touch "$dir/.rename_tmp/.exists"
fi
IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
if [ -f "$file" ]; then
cp $file "$dir/.rename_tmp/"
fi
done
pydir="$dir.rename_tmp"
pyrenamer -r "$pydir"
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
if [ -f "$file" ]; then
rm $file
fi
done
mvfiles="$dir/.rename_tmp/*"
mv $mvfiles "$dir/"
rm "$dir/.rename_tmp/.exists"
rmdir "$dir/.rename_tmp"
Senast redigerad av 2 bbauto, redigerad totalt 31 gång.
- bbauto
- Inlägg: 1594
- Blev medlem: 11 dec 2006, 17:58
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Bromölla
Re: Dela med dig av dina egna script/*sh-tips
Ytterligare Nautilus script (ChgOwner):
Kod: Markera allt
#!/bin/sh
# Change Owner and Group to Read & Write recursively from current dir.
# Replace root:admin if you wish (NewOwner:NewGroup)
base=”`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d’/’ -f3- | sed ’s/%20/ /g’`”
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
dir=”$base”
else
while [ ! -z "$1" -a ! -d "$base/$1" ]; do shift; done
dir=”$base/$1″
fi
cd "$dir"
foo=`gksudo -u root -k -m "enter your password for nautilus root access" /bin/echo "got r00t?"`
sudo chown --recursive root:admin ./
foo=`gksudo -u root -k -m "enter your password for nautilus root access" /bin/echo "got r00t?"`
sudo chmod --recursive 770 ./
- bbauto
- Inlägg: 1594
- Blev medlem: 11 dec 2006, 17:58
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Bromölla
Re: Dela med dig av dina egna script/*sh-tips
Jag jobbar mycket med Postscript utskrifter från olika CAD-program, oftast till ett spooler directory... sen kopierar jag alla *.PS -> Projektnamn.PS
och avslutar sedan med denna script, för att slutligen göra hela ritningssatser till PDF-format.
och avslutar sedan med denna script, för att slutligen göra hela ritningssatser till PDF-format.
Kod: Markera allt
#!/bin/bash
#created by bbauto
IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
if [ -f "$file" ]; then
base=${file%.*}
newname=${base}.pdf
ps2pdf $file $newname
cp $newname /home/bengtb/Skrivbord/PS-PDF
# rm $newname
rm $file
fi
done
Re: Dela med dig av dina egna script/*sh-tips
clftail
Tailer för Common Log Format (apache, lighttpd osv) som gör det lite lättare att se vad som försigår på webservern, i realtid.
mail
Det var aningens lurigt att lista ut hur msmtp ville att man skulle specificera mottagare, subject och body, så jag skrev en wrapper runt det för att slippa glömma bort någon mer gång.
unpack
Packar upp film till /mnt/$disk/.temp, spelar den och tar bort den uppackade filmen efteråt. Håller reda på vilka filmer som är sedda.
Bara ett proof of concept; Jag upptäckte nyss att man kan styra mplayer genom FIFOs. Otroligt användbart.
mpdmon-full
Monitor för mpd med history, när sång byts så notifieras vi.
mpdmon-rt
Samma sak här, men vi uppdaterar en och samma rad hela tiden, vilket gör det perfekt för conky, dzen, hardstatus i screen eller liknande.
colortest-256-ng
Inspirerad av http://www.vim.org/scripts/script.php?script_id=1349 så tänkte jag att jag kunde göra det lite snyggare. Helt otroligt att han verkar ha suttit och skrivit alla escapesekvenser för hand.
Slutligen så tyckte jag att http://en.wikipedia.org/wiki/Collatz_conjecture var intressant, så jag löste den;
Tailer för Common Log Format (apache, lighttpd osv) som gör det lite lättare att se vad som försigår på webservern, i realtid.
Kod: Markera allt
#!/usr/bin/perl
use strict;
use File::Tail;
my $log = shift;
my $line = "";
my $tail = File::Tail->new(name=>$log,
maxinterval=>3,
adjustafter=>3,
interval=>0,
tail=>100
);
while(defined($line=$tail->read)) {
my $e = "(.+?)";
$line =~ /^$e $e $e \[$e:$e $e\] "$e $e $e" $e $e/;
my $ip = $1;
my $ref = $2;
my $name = $3;
my $date = $4;
my $time = $5;
my $gmt = $6;
my $request = $7;
my $file = $8;
my $ptcl = $9;
my $code = $10;
my $size = $11;
$code = "\033[38;5;240m$code\033[0m" if $code == 404;
$code = "\033[38;5;155m$code\033[0m" if $code == 200;
$code = "\033[38;5;160m$code\033[0m" if $code == 501;
$code = "\033[38;5;208m$code\033[0m" if $code == 301;
$code = "\033[38;5;124m$code\033[0m" if $code == 403;
$code = "\033[38;5;113m$code\033[0m" if $code == 304;
$file = "" if $file =~ /^\/$/;
$file = "\033[38;5;160m$file\033[0m" if $file !~ /([A-Za-z0-9])+/;
$size = "\033[38;5;160m$size\033[0m" if $size > 5;
printf("%s %7s %s %s %60s\n",
$code, $request, $size, $ip, $file);
}
Det var aningens lurigt att lista ut hur msmtp ville att man skulle specificera mottagare, subject och body, så jag skrev en wrapper runt det för att slippa glömma bort någon mer gång.
Kod: Markera allt
#!/usr/bin/perl
use strict;
#mail
use Getopt::Long;
&interactive if !@ARGV;
our $opt_stdin;
GetOptions(stdin => \$opt_stdin);
my @details = @ARGV;
my $acc = "gmail";
my $def_Rec = "trapd00r\@trapd00r.se";
&readStdin if $opt_stdin;
sub readStdin {
my @body;
while(<>) {
push(@body, $_);
}
my $body = join/\n/, @body;
my $rec = $def_Rec;
my $subject = 'stdin';
my $content = sprintf("Subject:$subject\n\n$body\n");
system("printf \"$content\"|msmtp -a $acc \"$def_Rec\"");
print "Status: $?\n";
exit 0;
}
sub mail {
my ($subject, $body, $rec) = @_;
$rec = "foo\@bar.com" unless $rec;
my $content = sprintf("Subject:$subject\n\n$body\n");
system("printf \"$content\"|msmtp -a $acc \"$rec\"");
print "Status: $?\n";
}
&mail(@details);
sub interactive {
print "Subject: ";
my $subject = <STDIN>;
print "Body: ";
my $body = <STDIN>;
print "Mail: ";
my $rec = <STDIN>;
chomp($subject,$body,$rec);
my $content = sprintf("Subject:$subject\n$body\n");
system("printf \"$content\"|msmtp -a $acc \"$rec\"");
print "Status: $?\n";
}
Packar upp film till /mnt/$disk/.temp, spelar den och tar bort den uppackade filmen efteråt. Håller reda på vilka filmer som är sedda.
Kod: Markera allt
#!/bin/sh
# unpack script
chmod 777 $(pwd)
find . -iname '*.rar' -execdir rar x {} $(pwd | perl -pe 's/^((?:\/[^\/]+){2}\/).*/$1/').temp/ \;
mplayer -slave -input file=/home/scp1/.mplayer/fifo $(pwd | perl -pe 's/^((?:\/[^\/]+){2}\/).*/$1/').temp/* && rm $(pwd | perl -pe 's/^((?:\/[^\/]+){2}\/).*/$1/').temp/*
# keep track of what I've seen
echo $(basename $(pwd)) >> /mnt/Movies_1/.seen
Kod: Markera allt
#!/usr/bin/perl
use strict;
my $fifo = "/home/scp1/.mplayer/fifo";
my %commands = ('fs' => 'vo_fullscreen',
'stop' => 'stop',
'pause' => 'pause',
'soff' => 'mute 1',
'son' => 'mute 0',
'fstep' => 'frame_step',
'osd' => 'osd',
);
if(!@ARGV) {
foreach my $choice(sort(keys(%commands))) {
printf("%6s %s\n", $choice, $commands{$choice});
}
}
my $cmd = shift;
&talk($commands{$cmd});
sub talk {
my $cmd = shift;
open(FIFO,'>',$fifo) or die $!;
print FIFO $cmd, "\n";
close(FIFO);
}
Monitor för mpd med history, när sång byts så notifieras vi.
Kod: Markera allt
#!/usr/bin/perl
use strict;
use Audio::MPD;
use List::Util qw(shuffle);
my $mpd = Audio::MPD->new;
sub monitor {
my $np = "";
my @c;
for(my $i=0;$i<256;$i++) {
push(@c, "\033[38;5;$i"."m");
}
while(1) {
my $current = $mpd->current;
my $output = $mpd->current->file;
if(!$current) {
$current = $c[1].'undef'.$c[0];
$output = $current;
}
my $time1 = $mpd->status->time->sofar;
my $time2 = $mpd->status->time->total;
my @date = localtime(time);
if("$np" ne "$current") {
$np = $current;
my @rc = shuffle(@c);
printf("%02s:%02s:%02s▕ $rc[0]%s$c[0]\n",
$date[2], $date[0], $date[1], $output);
}
sleep 2;
}
}
&monitor;
Samma sak här, men vi uppdaterar en och samma rad hela tiden, vilket gör det perfekt för conky, dzen, hardstatus i screen eller liknande.
Kod: Markera allt
#!/usr/bin/perl
use strict;
use Audio::MPD;
my $mpd = Audio::MPD->new;
sub monitor {
my $np = "";
while(1) {
my $current = $mpd->current;
my $output;
if(!$current) {
$output = 'undef';
$current = 'undef';
}
else {
$output = $mpd->current->artist . ' - ' .
$mpd->current->album . ' - ' .
$mpd->current->title;
}
my $time1 = $mpd->status->time->sofar;
my $time2 = $mpd->status->time->total;
$| = 1;
printf(" [%s/%s]\r", $time1, $time2);
if("$np" ne "$current") {
$np = $current;
printf("\t\t%s\r", $output);
}
sleep 1;
}
}
&monitor;
Inspirerad av http://www.vim.org/scripts/script.php?script_id=1349 så tänkte jag att jag kunde göra det lite snyggare. Helt otroligt att han verkar ha suttit och skrivit alla escapesekvenser för hand.
Kod: Markera allt
#!/usr/bin/perl
# colortest-256-ng
# prints table of available colors for terminals supporting 256 colors
# optionally takes arbitary input and colors it randomly
use strict;
use Getopt::Long;
use List::Util qw(shuffle);
my %colors;
for(my $i=0;$i<256;$i++) {
$i = sprintf("%03s", $i);
my $escaped_escape = "\\033[38;5;$i".'m';
$colors{$escaped_escape} = "\033[38;5;$i".'m';
}
if(!@ARGV) {
foreach my $str(sort(keys(%colors))) {
print "$str $colors{$str}\n";
}
print "\033[0m\n";
print << "USAGE";
USAGE: $0 [-c <cmd>]
EXAMPLES
ls|./$0 -c
./$0 -c file
dmesg|./$0
USAGE
exit 0;
}
GetOptions('cmd' => \&cmd,
);
sub cmd {
while(<>) {
my @colors = values %colors;
@colors = shuffle(@colors);
my @seen;
my $i = 0;
push(@seen, $colors[$i]);
if($colors[0] ~~ @seen) {
$i++;
print $colors[0], $_;
}
}
}
Kod: Markera allt
#!/usr/bin/perl
$i=shift;while($i>1){if($i%2==0){$i=$i/2;}else{$i=$i*3+1;}print"$i\n";}
Senast redigerad av 1 dmz, redigerad totalt 10 gånger.
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
ǁ Q: Why is top posting so bad?
- SlamsornasKung
- Inlägg: 886
- Blev medlem: 27 jun 2009, 19:23
- OS: Ubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: 08
Re: Dela med dig av dina bästa shell-tips
Hej!David Andersson skrev:Se de nyaste/senast ändrade filerna i aktuell katalog:
Kod: Markera allt
ls -Altr
Hundra år försent, men i alla fall...
Koden ovan är faktiskt lite felaktig. Den sorterar ”reversed”, med andra ord hamnar de SENAST ändrade filerna SIST, det är väl snarare så att du vill se de senast ändrade filerna FÖRST.
Om du istället kör:
ls -Alt eller föralldel bara ls -lt så visas de senast ändrade filerna FÖRST (överst) i listan. Personligen lägger jag dessutom till | head -10 så att jag ser de tio senast ändrade filerna, alltså:
Kod: Markera allt
ls -lt | head -10
PS. Vad tycks Obi-Wan ;-) DS.
SK
HP NC2400 - Ubuntu 10.04 • Fujitsu Siemens AmiloM7400 - Arch Linux • HP/Compaq Mini 110C - Ubuntu 10.04
CryingFreeman skrev:[…] Ubuntu är och förblir en meritokrati, inget demokratiskt experiment där alla får säga vad som helst till vem som helst, hur som helst.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Dela med dig av dina bästa shell-tips
Det är nog meningen ska du se. På det kan man enkelt och snabbt se de senast ändrade filerna direkt utan att behöva scrolla upp en massa och man slipper dessutom pipe:a vidare till less eller more eller för den delen head.SlamsornasKung skrev:Koden ovan är faktiskt lite felaktig. Den sorterar ”reversed”, med andra ord hamnar de SENAST ändrade filerna SIST, det är väl snarare så att du vill se de senast ändrade filerna FÖRST.
- Osprey
- Inlägg: 6310
- Blev medlem: 06 apr 2008, 00:09
- OS: Ubuntu
- Ort: Göteborg/Mölndal/Falkenberg
- Kontakt:
Re: Dela med dig av dina bästa shell-tips
Tror också att det är meningen, jag använder ofta "-ltr" själv och r:et just för att då slipper jag att scrolla för att hitta senaste filen och den hamnar närmast prompten, där jag ändå har blicken fäst så att säga...Konservburk skrev:Det är nog meningen ska du se. På det kan man enkelt och snabbt se de senast ändrade filerna direkt utan att behöva scrolla upp en massa och man slipper dessutom pipe:a vidare till less eller more eller för den delen head.SlamsornasKung skrev:Koden ovan är faktiskt lite felaktig. Den sorterar ”reversed”, med andra ord hamnar de SENAST ändrade filerna SIST, det är väl snarare så att du vill se de senast ändrade filerna FÖRST.
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Re: Dela med dig av dina bästa shell-tips
Du kan skippa -10, det är default.SlamsornasKung skrev:
Personligen lägger jag dessutom till | head -10

Värt att notera är att -r till ls fungerar på i princip allting, mycket smidigt.
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
ǁ Q: Why is top posting so bad?
-
- Inlägg: 4164
- Blev medlem: 19 jan 2008, 13:52
- OS: Debian
Re: Dela med dig av dina egna script/*sh-tips
BRA jobbat där dmz, så ska det se ut!


- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Dela med dig av dina bästa shell-tips
Undantaget är väl -U då, men just den kombinationen är ju ändå inte vettig.dmz skrev:Värt att notera är att -r till ls fungerar på i princip allting, mycket smidigt.
- BadOmen
- Inlägg: 1172
- Blev medlem: 18 aug 2006, 10:45
- OS: Kubuntu
- Utgåva: 24.04 Noble Numbat LTS
- Ort: Umeå
Re: Dela med dig av dina egna script/*sh-tips
Här kommer ett litet Nautilus script som gör att man kan skapa en kopia av en fil i samma mapp som man befinner sig i, man får möjligheten att döpa den till vad man vill.
EDIT: Ändrade koden lite så att den även kollar om man har skrivrättigheter, tidigare meddelade den att kopieringen var klar fasten själva kopieringen misslyckades... Nu får man ett felmeddelande om kopieringen misslyckas.
BTW så har jag gjort den här framföralt för att testa zenity och lite -f -a -n (vad de nu kallas), nämnde jag att jag gillar if satser
Kod: Markera allt
#!/bin/bash
# This script makes it easy to make a duplicate of a file in the same directory.
# It lets you choose a name for the new file and then it makes the copy with the new name.
# $1 Is the selected file
if [[ -f "$1" ]]; then # True if FILE exists and is a regular file.
selectedFile="$1"
backupname=$(zenity --text="Skriv in backup namnet för filen." --entry-text="$selectedFile" --entry)
if [[ $? == 0 ]]; then # True if previos command exicutet correctly.
if [[ -n "$backupname" ]]; then # True if the length of "STRING" is non-zero.
if [[ -a "$backupname" ]]; then # True if FILE exists.
if zenity --question --ok-label=JA --cancel-label=NEJ --text="Filen $backupname finns redan, vill du skriva över den?"; then
if [[ -w "$backupname" ]]; then # True if FILE exists and is writable.
cp "$1" "$backupname"
if [[ $? == 0 ]] ; then # True if previos command exicutet correctly.
zenity --info --text "Backupen är nu klar, filen $backupname har skapats."
else
zenity --info --text "Backupen misslyckades, kanske har du inte skrivrättigheter här"
fi
else
zenity --info --text "Filen $backupname är skrivskyddad så backupen kunde inte tas."
fi
else
zenity --info --text "Backupen är ej genomförd"
fi
else
cp "$1" "$backupname"
if [[ $? == 0 ]] ; then # True if previos command exicutet correctly.
zenity --info --text "Backupen är nu klar, filen $backupname har skapats."
else
zenity --info --text "Backupen misslyckades, kanske har du inte skrivrättigheter här"
fi
fi
else
zenity --info --text "Backupen är ej genomförd, du namngav inte filen."
fi
else
zenity --info --text "Backupen är ej genomförd"
fi
else
zenity --info --text "Du har inte valt någon fil."
fi
EDIT: Ändrade koden lite så att den även kollar om man har skrivrättigheter, tidigare meddelade den att kopieringen var klar fasten själva kopieringen misslyckades... Nu får man ett felmeddelande om kopieringen misslyckas.
BTW så har jag gjort den här framföralt för att testa zenity och lite -f -a -n (vad de nu kallas), nämnde jag att jag gillar if satser

Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
- SlamsornasKung
- Inlägg: 886
- Blev medlem: 27 jun 2009, 19:23
- OS: Ubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: 08
Re: Dela med dig av dina bästa shell-tips
Å... då är jag med. Trodde att de senast ändrade filerna skulle hamna överst. My bad!Konservburk skrev:Det är nog meningen ska du se. På det kan man enkelt och snabbt se de senast ändrade filerna direkt utan att behöva scrolla upp en massa och man slipper dessutom pipe:a vidare till less eller more eller för den delen head.SlamsornasKung skrev:Koden ovan är faktiskt lite felaktig. Den sorterar ”reversed”, med andra ord hamnar de SENAST ändrade filerna SIST, det är väl snarare så att du vill se de senast ändrade filerna FÖRST.
HP NC2400 - Ubuntu 10.04 • Fujitsu Siemens AmiloM7400 - Arch Linux • HP/Compaq Mini 110C - Ubuntu 10.04
CryingFreeman skrev:[…] Ubuntu är och förblir en meritokrati, inget demokratiskt experiment där alla får säga vad som helst till vem som helst, hur som helst.
Re: Dela med dig av dina egna script/*sh-tips
Jag har gjort en urklippshanterardaemon med perl, bash och dmenu.
dmenuclip
Själva startar-scriptet för att kicka igång dmenu. Ruskigt fult. Just system()-raden är jag riktigt stolt över, fulare kodstycke har nog aldrig skådats
dmenuclip-syncd
Daemon som ligger i bakgrunden och kontinuterligt samlar in allt som ligger i buffern och skriver det till fil. Det är ifrån denna fil vi sedan hämtar alla urklipp, och väljer det vi vill använda oss av (som då skickas till den primära buffern).
Notera att inga duplicationer förekommer i filen (känns rätt onödigt).
Det hela kan se ut så här;

dmenuclip
Själva startar-scriptet för att kicka igång dmenu. Ruskigt fult. Just system()-raden är jag riktigt stolt över, fulare kodstycke har nog aldrig skådats
Kod: Markera allt
#!/usr/bin/perl
# dmenuclip.pl
# REALLY nasty...
use strict;
my $xsels = "/home/scp1/.config/dmenuclip/xsel";
my $f = '-*-fixed-*-*-*-*-15-*-*-*-*-*-*-*';
my $dmenu = 'dmenu -i -b -nb \#1c1c1c -nf \#d7005f -sb \#252525';
system("printf \$(\\cat $xsels|$dmenu -fn $f -p xsel)|xclip -i -l 1|xclip -o");
Daemon som ligger i bakgrunden och kontinuterligt samlar in allt som ligger i buffern och skriver det till fil. Det är ifrån denna fil vi sedan hämtar alla urklipp, och väljer det vi vill använda oss av (som då skickas till den primära buffern).
Notera att inga duplicationer förekommer i filen (känns rätt onödigt).
Kod: Markera allt
#!/usr/bin/perl
use strict;
# dmenuclip-syncd - daemon that saves all X selections for use with dmenuclip
use Proc::Daemon;
#use Data::Dumper;
my $xsel = "$ENV{'HOME'}/.config/dmenuclip/xsel";
sub syncIt {
print "Daemonizing...\n";
#Proc::Daemon::Init;
while(1) {
open(XSEL,"<", $xsel) or die "Cant open $xsel for reading: $!";
my @lines = <XSEL>;
chomp @lines;
close XSEL;
my $currentSel = `/usr/bin/xsel -o`;
chomp($currentSel);
$currentSel =~ s/\n/ /g; #temporary (?) fix for the newline hassle
#print Dumper($currentSel);
if($currentSel ~~ @lines) {
&syncSec(0);
}
else {
open(XSEL_W, ">>", $xsel) or die "Cant open $xsel for writing: $!";
print XSEL_W "$currentSel\n";
close XSEL_W;
}
sleep 2;
}
}
&syncIt;
# Those are deprecated, but left here for reference (and the dummy call)
sub syncPrim {
system("/usr/bin/xclip -o --selection primary -o) >> $xsel&&printf \"\n\" >> $xsel");
}
sub syncSec {
my $c = shift;
unless($c == 0) {
system("/usr/bin/xclip -o >> $xsel"); #&& printf \"\n\" >> $xsel");
}
}

- Bilagor
-
- screenshot.png (864 Bytes) Visad 2815 gånger
Senast redigerad av 1 dmz, redigerad totalt 15 gånger.
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
ǁ Q: Why is top posting so bad?
- BadOmen
- Inlägg: 1172
- Blev medlem: 18 aug 2006, 10:45
- OS: Kubuntu
- Utgåva: 24.04 Noble Numbat LTS
- Ort: Umeå
Re: Dela med dig av dina egna script/*sh-tips
Utanför ämnet: Lite utanför ämnet kanske men jag skulle tycka det var väldigt bra om ni kommenterar lite i er kod så att även man som nybörjare på Bash kan läsa koden och lära sig lite också. Kanske man till och med får för sig att utveckla skripten lite ifall man får mer förståelse för hur de funkar. Kanske det kan inspirera till nya skript med den nyvunna kunskapen.
För övrigt en riktigt trevlig och inspirerande tråd
För övrigt en riktigt trevlig och inspirerande tråd

Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/