es hat sich so gelesen als würde man nur per Konsole effizient arbeiten können, das wollte ich nur wiederlegen, natürlich gebe ich dir Recht das wenn man so etwas nicht oft mach die Konsole ausreicht

Der Code-Schnippsel-Thread
-
-
es hat sich so gelesen als würde man nur per Konsole effizient arbeiten können, das wollte ich nur wiederlegen, natürlich gebe ich dir Recht das wenn man so etwas nicht oft mach die Konsole ausreichtDas hast du genau genommen eigentlich nicht widerlegt, sondern nur dargestellt, dass man auch mit anderen Mitteln einen Automatismus herstellen kann. Gerade wenn man etwas oft macht ist ja eben die "Batch Verarbeitung" (= Schleife/Map-Funktion) das Mittel der Wahl. Egal, mit welchem Werkzeug.
Und wie shadowtux schon richtig gesagt hat geht's hier um Pixelschubsen einfachster Güte, da brauchts wahrlich kein Editor sondern lediglich ein Werkzeug für genau das. -
-
-
Mal wieder ein "nichts wildes, aber evtl mal ganz nett wenn man die Syntax davon sucht":
Bash
Alles anzeigen#!/bin/bash command=${1} if test "${command}" = "mute" ; then pactl set-sink-mute 0 toggle else if pacmd list-sinks | grep -i "muted: yes" >/dev/null ; then pactl set-sink-mute 0 toggle fi if test "${command}" = "higher" ; then pactl set-sink-volume 0 +10% elif test "${command}" = "lower" ; then pactl set-sink-volume 0 -10% fi fi
Nimmt als Parameter higher, lower oder mute und setzt die Lautstärke entsprechend in Pulseaudio. Kannn man zum Beispiel Tastenkombis drauf zeigen lassen für Lautstärkebuttons. -
Code
Alles anzeigen@echo off :a color 2 echo 1 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 1 1 1 ping localhost -n 1 > nul echo 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 0 0 echo 0 0 0 1 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 ping localhost -n 1 > nul echo 1 1 1 0 0 0 0 1 1 1 0 1 3 1 0 0 0 4 F 1 1 1 1 5 0 0 0 1 1 1 0 1 0 1 0 1 0 2 1 ping localhost -n 1 > nul echo 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 0 0 echo 0 0 0 1 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 echo 1 1 1 0 0 0 0 1 1 1 0 1 3 1 0 0 0 4 F 1 1 1 1 5 0 0 0 1 1 1 0 1 0 1 0 1 0 2 1 ping localhost -n 1 > nul echo 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 0 0 echo 0 0 0 1 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 goto a
das ergibt nen Fake Matrix Bildschirm
-
Ein Freund bat mich um Rat: Knapp 1400 Zeilen einer Senderliste sollten nach einem bestimmten Schema zugeschnitten werden. Beispiel-Datensatz:
#SERVICE 4097:0:1:2:0:0:0:0:0:0:https%3a//admin%3aHalloWHF@spielt.keinerolle.ch/stream/channelid/787394218[color=#FF0000]?ticket=1A65EC926EBE4EABBE8705321D943411FF46EE02&profile=pass:[/color]1 FL TV#DESCRIPTION 1 FL TVDer rot markierte Teil sollte entfernt werden. Ich habe nicht lange überlegt und eine Quick-and-Dirty-Workaroundlösung in bash zusammengezimmert.
Bash
Alles anzeigen#!/bin/bash finfile="${1%.txt}_final.txt" if ! test -f "${1}" ; then echo "file missing.." ; fi if test -f $finfile ; then rm $finfile ; fi while read line ; do if echo $line | grep DESCRIPTION ; then echo $line >> $finfile elif echo $line | grep NAME ; then echo $line >> $finfile else str1=$(echo $line | cut -d "?" -f 1) str2=$(echo $line | cut -d "?" -f 2 | cut -d "=" -f 3 | cut -d ":" -f 2) echo "${str1}:${str2}" >> $finfile fi done < $1
Mir ist klar, dass man da EINIGES optimieren kann. Alleine schon, die Zwischenstrings nicht erst in Variablen zu packen, sondern das Ganze direkt in EINEM Rutsch auszugeben. Aber wie gesagt, das war nur eine Quick and Dirty-Workaroundlösung und so sparte er sich eine Menge Arbeit, diese Strings jeweils von Hand zu cutten.
Nur aus Interese: Vielleicht hat ja jemand eine Idee, wie mans schöner machen könnte? Ich habe jetzt einfach mal aus dem Kopf ein bisschen coreutils-Grundlagen rungeschrieben, hatte nicht die Zeit um weitergehende Parameter/Optionen in den Manpages zu recherchieren.
-
-
Uff, jetzt sag nicht, dass mein gesamtes Script durch einen einzigen Regexp ersetzt werden kann.. Heftig, danke!
Allerdings hat diese Variante einen Haken: Sie funktioniert nur mit der GNU-Version von sed, mit der BSD-Variante (etwa vom Mac) gibt es kein -r. Wobei man das sicher noch anpassen kann.
Ich muss unbedingt mal Regexp lernen irgendwann, ist schon geil was damit geht!
-
Ich habe diese Regular Expression auf meinem Mac erzeugt unter Big Sur mit einer BSD Version von sed und bei mir funktioniert das.
-r und -E sind gleichwertig bei BSD sed, aber nur -r funktioniert auf beiden.Für einen Überblück über Regex, kann ich nur das hier empfehlen: https://laracasts.com/series/underst…lar-expressions
-
Interessant, dann hat sich zwischen Catalina und Big Sur die Syntax von sed geringfügig geändert. Danke für die Info!
-
Hab mal was gebastelt.
Bash
Alles anzeigen#!/bin/bash echo "############################################" echo "############################################" echo "# Backup-Script #" echo "# Author: tk1908 #" echo "# E-Mail: tk1908@tkbrew.net #" echo "# #" echo "############################################" echo "############################################" OS=$(uname) case $OS in Linux) ROOTPATH = "/mnt";; Darwin) ROOTPATH = "/Volumes";; esac HOSTS=(krypton keppler tesla) #SHARES=(applications backups documents games misc movies music pictures series) SHARES=( $(showmount -e krypton |cut -d " " -f1 | sed '1d') ) # Gedankengang! Nicht prod. Reines dev. echo "Migrate from Data from krypton to xenon01" echo "Making Directorystructure and mounting shares" for HOST in ${HOSTS[*]} do sudo mkdir $ROOTPATH/$HOST/ done for SHARE in ${SHARES[*]} do sudo mkdir $ROOTPATH/$HOST/$SHARE/ mount $HOST$SHARE done done echo mounting SHARES sudo mount $HOST[] function tier2_Backup { rsync -rvu $ROOTPATH/$HOSTS[0]/documents/ $ROOTPATH/$HOSTS[1]/documents rsync -rvu $ROOTPATH/$HOSTS[0]/hoerspiele/ $ROOTPATH/$HOSTS[1]/hoerspiele rsync -rvu $ROOTPATH/$HOSTS[0]/music/ $ROOTPATH/$HOSTS[1]/music rsync -rvu $ROOTPATH/$HOSTS[0]/pictures/ $ROOTPATH/$HOSTS[1]/pictures rsync -rvu $ROOTPATH/$HOSTS[0]/videos/ $ROOTPATH/$HOSTS[1]/videos } function tier3_Backup { rsync -rvu $ROOTPATH/$HOSTS[1]/applications/ $ROOTPATH/$HOSTS[2]/applications rsync -rvu $ROOTPATH/$HOSTS[1]/documents/ $ROOTPATH/$HOSTS[2]/documents rsync -rvu $ROOTPATH/$HOSTS[1]/games/ $ROOTPATH/$HOSTS[2]/games rsync -rvu $ROOTPATH/$HOSTS[1]/hoerspiele/ $ROOTPATH/$HOSTS[2]/hoerspiele rsync -rvu $ROOTPATH/$HOSTS[1]/misc/ $ROOTPATH/$HOSTS[2]/misc rsync -rvu $ROOTPATH/$HOSTS[1]/music/ $ROOTPATH/$HOSTS[2]/music rsync -rvu $ROOTPATH/$HOSTS[1]/videos/Filme $ROOTPATH/$HOSTS[2]/movies rsync -rvu $ROOTPATH/$HOSTS[1]/videos/Serien $ROOTPATH/$HOSTS[2]/series } echo cleaning sudo umount $SOURCEMOUNTPATH sudo umount $TARGETMOUNTPATH sudo rm -rf /mnt/*
Aktuell suche ich noch nach einer Möglichkeit, dein Output von showmount -e <hostname> so zu parsen, dass ich ihn als Input für meinen Mount-Befehl nutzen kann. Cutten kann ich den Output schon, aber irgendwas ist da noch schief. Vielleicht hat von euch ja jemand ne Idee.
-
-
-
Nice, funzt. Danke
-
In so 'ne Falle bin ich selber auch mal reingetappt. Scheiße, wenn man Powershell sowie C# oder gar die fish-Shell gewohnt ist.
-
@amok_alex
Letzte Warnung.
bitte unterlasse diese unsinnigen hashtags die nichts mit dem Thema zu tun haben. Das steigert auch die Qualität deiner Postings. -
Gewöhn dir am besten bei allen Variablen in Bash an, ihre Namen in {} einzupferchen, zum Beispiel ${example}Bei der Gelegenheit sollte man sich auch gleich angewöhnen, immer "${foo}" zu schreiben, vor allem, wenn man es mit Datei-/Directorynamen zu tun hat, die Leerzeichen beinhalten können, insb. bei so Sachen wie for f in *; do … (also Files in einer Schleife behandeln) usw. Oder gibt es dafür einen besseren Weg, den ich noch nicht entdeckt habe?
Wüsste jetzt auch aus dem Steigreif nicht, wie sich das {} in find . -type f -iname "*.bla" -exec command {} \; verhält.
Und ja, da ist noch find -print0 nach xargs -0 pipen.
-
Volle Zustimmung, mache ich auch immer
-
Ebenso sollte man bei Bash-Scripten immer beachten, dass Schleifen mit dem Keyword 'do' eröffnet und mit 'done' abgeschlossen werden. Jedes mal vergess ich das nämlich, weil von anderen C-like-Sprachen gewohnt, die geschweiften Klammern den Beginn und das Ende des jeweiligen Blocks definieren. Nur haben die bei der Bash halt ne andere Funktion als den Beginn und Abschluss eines Anweisungsblocks zu kennzeichnen.
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!