Dela med dig av dina egna script/*sh-tips

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Dela med dig av dina bästa shell-tips

Inlägg av dmz »

Slöläste releaseloggen för Bash 4.0 och kan meddela att bash numera har stöd för "autocd" som har funnits i zsh länge.
d. There is a new `autocd' option that, when enabled, causes bash to attempt
to `cd' to a directory name that is supplied as the first word of a
simple command.
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Dela med dig av dina bästa shell-tips

Inlägg av David Andersson »

Ctrl-u och Ctrl-y

Exempel:

Börjar att skriva ett kommando
$ file * >/tmp/file.txt
Inser innan jag trycker return att jag står i fel mapp

Klipper bort och sparar kommandot (hela kommandot från början av raden till markören)
<ctrl-u>

Går till rätt mapp
$ cd /bin
<return>

Klistrar in sparat kommando
<ctrl-y>

Nu står det åter "file * >/tmp/file.txt" på kommandoraden
Nu kan jag uföra kommandot
<return>

(Det är ofarligt att testa ovanstående exempel i vilken mapp som helst. Du ska inte skriva $, och du ska inte skriva < och >. Det som ser ut som <ctrl-u>, <ctrl-y> och <return> är distinkta tangent-tryckningar.)

Förklaring:

Ctrl-u = unix-line-discard = klipp ut allt före markören
Ctrl-y = yank = klistra in

(Notera att klipp och klistra med tangenter i bash inte har samma klippbord som grafiska kommandon.)
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Dela med dig av dina bästa shell-tips

Inlägg av Barre »

kanske redan finns här, men jag brukar använda detta kommando när jag behöver ta en snabb backup på en konfigurationsfil innan jag ändrar i den

Kod: Markera allt

$ cp filnamn{,.$(date +%y%m%d).bak}
eller, när jag inte behöver så många versioner av konfiurationsfilen, och inte bryr mog om jag skriver över någon äldre version

Kod: Markera allt

cp filnamn{,.bak}
palle-kuling
Inlägg: 466
Blev medlem: 16 apr 2008, 21:54
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Dela med dig av dina bästa shell-tips

Inlägg av palle-kuling »

Kod: Markera allt

cp filnamn{,.bak}
Grymt bekvämt.
Synd att det inte funkar i ubuntus sh (dash) bara. Men bash är ju fortfarande login shell iaf.
Man får vara försiktig så man inte använder det närsomhelst.
Hittade detta dokument, för alla som är intresserade över hur det skiljer sig åt; https://wiki.ubuntu.com/DashAsBinSh
MER MAKT TILL MIG! JAG BESTÄMMER!
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Dela med dig av dina bästa shell-tips

Inlägg av Barre »

palle-kuling skrev:

Kod: Markera allt

cp filnamn{,.bak}
Grymt bekvämt.
Synd att det inte funkar i ubuntus sh (dash) bara. Men bash är ju fortfarande login shell iaf.
Man får vara försiktig så man inte använder det närsomhelst.
Hittade detta dokument, för alla som är intresserade över hur det skiljer sig åt; https://wiki.ubuntu.com/DashAsBinSh

Du har rätt, jag var inte tydlig att det var bash det gällde, måste tänka på det...
beow
Inlägg: 44
Blev medlem: 05 jun 2006, 16:13
OS: Xubuntu

Re: Dela med dig av dina bästa shell-tips

Inlägg av beow »

Apropå datum funktioner.

$ date

är en guldgruva! Ett enklare sätt att få veckonummer ån ncal är

Kod: Markera allt

$ date +"%V"
Har satt ihop ett händigt litet shellscript som jag kallar "isow" (iso-week):

Kod: Markera allt

#!/bin/sh
#
# ISO week function
# Uses `date' function to present various ISO date formats
#
if [ "$1" = "-d" ] ; then
  date --iso-8601
elif [ "$1" = "-dt" ] ; then
  datum=`date --iso-8601` ; datum="$datum `date +"%T"`"; echo $datum
elif [ -z "$1" ] ; then
  date +"%V"
elif [ ${#1} -gt 5 ] ; then
  date --date=$1 +"%V"
else
  echo "Usage: isow [-d|-dt|-h]"
  echo "                   prints ISO week number"
  echo "             -d    prints ISO date"
  echo "             -dt   prints ISO date + local time"
  echo "             -h    prints this help message"
  echo "       isow YYYYMMDD|YYYY-MM-DD prints ISO week number of given date"
fi
som gör att man enkelt får ut datum på olika sätt för att t ex använda i andra script.

$ isow -h

ger optionerna.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Dela med dig av dina bästa shell-tips

Inlägg av Konservburk »

Barre skrev:kanske redan finns här, men jag brukar använda detta kommando när jag behöver ta en snabb backup på en konfigurationsfil innan jag ändrar i den

Kod: Markera allt

$ cp filnamn{,.$(date +%y%m%d).bak}
eller, när jag inte behöver så många versioner av konfiurationsfilen, och inte bryr mog om jag skriver över någon äldre version

Kod: Markera allt

cp filnamn{,.bak}
Vad använder du för editor som inte gör backuper per automatik?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Dela med dig av dina bästa shell-tips

Inlägg av Konservburk »

palle-kuling skrev:

Kod: Markera allt

cp filnamn{,.bak}
Grymt bekvämt.
Synd att det inte funkar i ubuntus sh (dash) bara. Men bash är ju fortfarande login shell iaf.
Man får vara försiktig så man inte använder det närsomhelst.
Hittade detta dokument, för alla som är intresserade över hur det skiljer sig åt; https://wiki.ubuntu.com/DashAsBinSh
Man kanske bör påpeka att bash och dash skiljer sig åt på betydligt fler sätt än vad som listas i den länken.
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Dela med dig av dina bästa shell-tips

Inlägg av Barre »

Konservburk skrev: Vad använder du för editor som inte gör backuper per automatik?
Men herregud, vilken attityd och extremt konstig tolkning av min post?
Jag har inte nämnt någonstans att jag använder någonsomhelst editor i min post... jag har läst det min post ett flertal gånger nu för att försöka hitta texten där jag refererar till editorer, men inte lyckats....

Kan i min själ inte förstå var din nyfikenhet om vilken editor jag använder kommer ifrån, men jag skall tala om det för dig.
Jag använder vi (eller snarare vim), jag är fullt medveten om att man kan ställa in vi att göra automatiska backupper av filer.
Jag tolkar din relativt konstiga fråga att du ifrågasätter behovet att ta backup på konfigurationsfiler innnan man gör förändringar i dem. Och det anser jag är naivt.... För att inte på gränsen till "off topic".

Jag har läst ganska många av dina inlägg och vet att du Konservburk är väl bevandrad i terminalernas förtrollade värld, och jag skulle bli mycket förvånad om du aldrig använd sed för att ändra t.ex en IP-adress i en fil...
Rune.K
Inlägg: 6437
Blev medlem: 09 jul 2008, 17:19
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Dela med dig av dina bästa shell-tips

Inlägg av Rune.K »

Utanför ämnet: Smaken är som baken...
Jag stänger alltid av automatisk backup i editorn.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Dela med dig av dina bästa shell-tips

Inlägg av Konservburk »

Barre skrev:
Konservburk skrev: Vad använder du för editor som inte gör backuper per automatik?
Men herregud, vilken attityd och extremt konstig tolkning av min post?
Men snälla Barre, det var inte alls meningen att du skulle ta illa upp. Jag brukar inte använda brace expansion på just det sättet. Antagligen mest för att själv upplever cp filnamn !#$~ vara smidigare ihop med autokomplettering. Jag tyckte dock det var en intressant idé med datummarkering av backuperna och funderade då över varför jag inte redan hade en sådan skalfunktion i min ~/.bashrc (jag är för lat för att skriva hela det kommandot varje gång) och kom då fram till att min editor redan automatiskt ordnar backuper åt mig.
Barre skrev:Jag har inte nämnt någonstans att jag använder någonsomhelst editor i min post... jag har läst det min post ett flertal gånger nu för att försöka hitta texten där jag refererar till editorer, men inte lyckats....
Du skrev "innan jag ändrar i den", vilket jag tolkade som att du kör backupkommandot precis innan du använder en editor.
Barre skrev:Kan i min själ inte förstå var din nyfikenhet om vilken editor jag använder kommer ifrån, men jag skall tala om det för dig.
Jag använder vi (eller snarare vim), jag är fullt medveten om att man kan ställa in vi att göra automatiska backupper av filer.
Är det så att det krävs att man själv gör någon inställning för att vim ska ordna automatiska backuper? Jag minns inte riktigt hur det var med den saken. :-/
Barre skrev:Jag tolkar din relativt konstiga fråga att du ifrågasätter behovet att ta backup på konfigurationsfiler innnan man gör förändringar i dem. Och det anser jag är naivt.... För att inte på gränsen till "off topic".
Då är jag formodligen naiv. Om editorn gör en backup ser jag inte riktigt syftet med att själv göra en egen. Ordentlig versionshantering av konfigurationsfiler är ett intressant ämne, men nu har vi som du redan påpekat hamnat helt "off topic".
Barre skrev:Jag har läst ganska många av dina inlägg och vet att du Konservburk är väl bevandrad i terminalernas förtrollade värld, och jag skulle bli mycket förvånad om du aldrig använd sed för att ändra t.ex en IP-adress i en fil...
Jag brukar undvika att använda "sed -i" just eftersom orginalfilen då går förlorad.
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Dela med dig av dina bästa shell-tips

Inlägg av David Andersson »

Konservburk skrev: Jag brukar undvika att använda "sed -i" just eftersom orginalfilen då går förlorad.
Ett litet shell-tips: Med sed -i~ och perl -i~ så sparas en backup som slutar på ~.

Exempel:

Kod: Markera allt

sed -i~ 's/shit/skit/g' *.txt

Kod: Markera allt

perl -i~ -pe 's/skit/shit/g' *.txt
Byt -i~ till -i.bak eller -i$(date +.%Y%m%d-%H%M) beroende på smak och läggning.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Dela med dig av dina bästa shell-tips

Inlägg av Konservburk »

David Andersson skrev:
Konservburk skrev: Jag brukar undvika att använda "sed -i" just eftersom orginalfilen då går förlorad.
Ett litet shell-tips: Med sed -i~ och perl -i~ så sparas en backup som slutar på ~.
Tack för tipset. Mycket praktiskt, åtminstone så länge man inte har något emot att låta editorn (i det här fallet sed eller perl) ta hand om backup:andet.
palle-kuling
Inlägg: 466
Blev medlem: 16 apr 2008, 21:54
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Dela med dig av dina bästa shell-tips

Inlägg av palle-kuling »

Ett litet shell-tips: Med sed -i~ och perl -i~ så sparas en backup som slutar på ~.
Strålande! Nu vart jag glad. Vad mycket man lär sig i denna tråden.

Utanför ämnet: Jag skrev en plugin till gedit som spara backuper centralt i .gedit-backups istället för att sprida ut dem över hela systemet! Jag är nog ingen riktig man, så jag kör inte vi(m).
MER MAKT TILL MIG! JAG BESTÄMMER!
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Dela med dig av dina egna script/*sh-tips

Inlägg av dmz »

mpdrand;
Lägger till n antal slumpvist utvalda låtar från mpd-biblioteket till spellistan.

Kod: Markera allt

#!/bin/sh
if [ -n "$1" ]; then
	TRACKS="$1"
else
	TRACKS=10
fi

mpc clear > /dev/null && mpc listall|sort -R|head -n $TRACKS|mpc add && mpc play > /dev/null
mpdfav;
Lägger till alternativt skapar en spellista med favoritlåtar. Jag använder det för att skapa en spellista med bra musik som sedan förs över till den bärbara mp3-spelaren inför nattens arbete (se nedan).

Kod: Markera allt

#!/bin/sh

LISTDIR=/mnt/Music_2/Playlists

if [ "$1" ]; 
then
	NAME="$1.m3u"
else
	NAME=$(date +%Y%m%d).m3u
fi

if [ -f "$LISTDIR/$NAME" ]; 
then
	echo $(mpc --format %file%|head -1 >> $LISTDIR/$NAME)
else
	echo $(mpc --format %file%|head -1 > $LISTDIR/$NAME)
fi

echo -e " CONTENT:\n"
cat $LISTDIR/$NAME

För att kopiera låtarna ifrån spellistan till mp3-spelaren kan man använda sig av;

Kod: Markera allt

cp -v $(cat favlist.m3u) /mnt/mp3spelare
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Dela med dig av dina egna script/*sh-tips

Inlägg av David Andersson »

dmz skrev:

Kod: Markera allt

if [ -f "$LISTDIR/$NAME" ]; 
then
	echo $(mpc --format %file%|head -1 >> $LISTDIR/$NAME)
else
	echo $(mpc --format %file%|head -1 > $LISTDIR/$NAME)
fi
[besserwisser]
Omdirigering till fil med >> lägger till i slutet om filen finns och skapar en fil om den inte finns. Man behöver alltså inte testa om filen finns. Ovanstående sex rader kan ersättas med

Kod: Markera allt

echo $(mpc --format %file%|head -1 >> $LISTDIR/$NAME)
Omdirigeringen sker i sub-processen $(...>>...) så stdout från den är tom. Det blir inga argument till echo. Det enda echo producerar är en tom rad. Ovanstående kan ersättas med

Kod: Markera allt

mpc --format %file%|head -1 >> $LISTDIR/$NAME
(Lägg till en ensam echo om tomraden var viktig)
[/besserwisser]
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Dela med dig av dina egna script/*sh-tips

Inlägg av dmz »

David Andersson skrev: Omdirigering till fil med >> lägger till i slutet om filen finns och skapar en fil om den inte finns. Man behöver alltså inte testa om filen finns.

Kod: Markera allt

 scp1:shiva » echo nej >> jo                                                        
zsh: no such file or directory: jo
En bashism, med andra ord. ;)
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Dela med dig av dina egna script/*sh-tips

Inlägg av David Andersson »

dmz skrev:
David Andersson skrev: Omdirigering till fil med >> lägger till i slutet om filen finns och skapar en fil om den inte finns. Man behöver alltså inte testa om filen finns.

Kod: Markera allt

 scp1:shiva » echo nej >> jo                                                        
zsh: no such file or directory: jo
En bashism, med andra ord. ;)
[messerschmitt]
Min dator är bättre än din dator
zsh
ls jo
ls: cannot access jo: No such file or directory
echo nej >> jo
ls jo
jo
[/messerschmitt]
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Dela med dig av dina egna script/*sh-tips

Inlägg av Konservburk »

dmz skrev:
David Andersson skrev: Omdirigering till fil med >> lägger till i slutet om filen finns och skapar en fil om den inte finns. Man behöver alltså inte testa om filen finns.

Kod: Markera allt

 scp1:shiva » echo nej >> jo                                                        
zsh: no such file or directory: jo
En bashism, med andra ord. ;)
Det är precis tvärtom... zsh spökar för dig igen (Du har lyckats aktivera NO_CLOBBER). Kör set +C och gör ett nytt försök så ska du se att det går bättre. >> har faktiskt fungerat som David beskriver ända sedan början av 70-talet, en sådär 15 år innan bash ens blev påtänkt.
Skriv svar

Återgå till "Terminalforum"