Ersetz mal /home/tkoehler/ durch ~, damit es auch bei anderen Benutzernamen/Homeverzeichnissen fehlerfrei läuft.

Der Code-Schnippsel-Thread
-
-
Ersetz mal /home/tkoehler/ durch ~, damit es auch bei anderen Benutzernamen/Homeverzeichnissen fehlerfrei läuft.Beziehungsweise ${HOME}, wenn das Skript eine einheitliche Form haben soll. ~ ist ein Alias für diese Variable.
Und die Shebang-Zeile #!/bin/bash muss an den Anfang der Datei, sonst lässt sich das Skript u. U. (falls es nicht von einer anderen Shell ausgeführt wird) nicht ausführen.
-
Beziehungsweise ${HOME}, wenn das Skript eine einheitliche Form haben soll. ~ ist ein Alias für diese Variable.
Und die Shebang-Zeile #!/bin/bash muss an den Anfang der Datei, sonst lässt sich das Skript u. U. (falls es nicht von einer anderen Shell ausgeführt wird) nicht ausführen.
Wird bei Gelegenheit angepasst.
-
Quellcode des Internets:
Code
Alles anzeigenldi r16, HIGH(RAMEND) out SPH, r16 ldi r16, LOW(RAMEND) out SPL, r16 main: sbi DDRD, 3 mainloop: sbi PORTD, 3 rcall wait cbi PORTD, 3 rcall wait rjmp mainloop wait: push r16 push r17 push r18 ldi r18, 0x0a waitloop1: ldi r17, 0xff waitloop2: ldi r16, 0xff waitloop3: dec r16 brne waitloop3 dec r17 brne waitloop2 dec r18 brne waitloop1 pop r18 pop r17 pop r16 ret
-
-
Die Werte der Variablen len und key miteinander vertauschen.
-
Ich habe mein erstes Userscript/Greasemonkey-Script mit Unterstützung durch jQuery geschrieben.Hab gerade festgestellt, das selbiges Skript mit minimalen Änderungen und zusätzlichen Kommentaren immer noch in meinem Browser-Profil lebt.
Code
Alles anzeigen// ==UserScript== // @name Dubhistory Forum // @namespace http://dosamp.net/ // @version 0.4 // @description Kennzeichnet Post-IDs mit wiederholenden Endziffern im Winhistory-Forum. // @match *://www.winhistory-forum.net/showthread.php?* // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js // ==/UserScript== (function() { 'use strict'; // at the moment we're at about pid=500000, so most possible multiples are sexts at the moment var multiples_names = ['Singles', 'Dubs', 'Trips', 'Quads', 'Quints', 'Sexts']; var multiples_colors = ['', '000080', '400060', '800040', 'c00020', 'ff0000']; function multiples(pid) { // most efficient number-to-string in JavaScript var pidstr = "" + pid; var matches = 1; // moved error detection for post #1111111 here, by extrapolation reached in 2026 for (var m = 2; m <= Math.min(pidstr.length, multiples_names.length - 1); m++) { // are the m last digits equal to the last one? if (pidstr.slice(-m) === new Array(m+1).join(pidstr.slice(-1))) { matches = m; } else { break; } } return matches; } // fuck yeah, CSS selectors $('div[style="float: right; width: auto; vertical-align: top"] > span.smalltext > strong > a').each(function(index) { var pidoff = $(this).attr('href').indexOf('#pid') + 4; if (pidoff > 3) { // -1 (not found) + 4 ('#pid'.length) == 3 var pid = $(this).attr('href').substring(pidoff); var mpls = multiples(pid); if (mpls > 1) { var mmpls = pid.slice(0, -mpls) + '*' + pid.slice(-mpls) + '*'; $(this).parent().before( '<strong style="color:#' + multiples_colors[mpls-1] + '" title="' + mmpls + '">' + multiples_names[mpls-1] + '</strong> | ' ); } } }); })();
Spoiler anzeigen
-
Witness these doubles
-
Code
Alles anzeigen// ==UserScript== // @name Explain xkcd // @namespace http://dosamp.net/ // @version 0.1 // @description Add "Explain" buttons for explainxkcd.com to xkcd comics // @author DosAmp // @match *://xkcd.com/* // @grant none // ==/UserScript== (function() { 'use strict'; var comic_id = document.getElementById("middleContainer").innerText.match(new RegExp("http://xkcd.com/([1-9][0-9]*)"))[1]; var navs = document.querySelectorAll("ul.comicNav"); for (var i = 0; i < navs.length; i++) { var link_item = document.createElement("a"); link_item.href = 'http://explainxkcd.com/' + comic_id; link_item.appendChild(document.createTextNode("Explain")); var list_item = document.createElement("li"); list_item.appendChild(link_item); navs[i].insertBefore(list_item, navs[i].querySelector("li:nth-child(4)")); } })();
-
Alle Artikel eine Ebay Kleinanzeigen-Verkäufers alphabetisch auflisten.
Ebay Kleinanzeigen bietet hierfür keine Funktion. Genauso wenig bietet es eine Möglichkeit zum durchsuchen der Artikel eines Verkäufers nach Begriffen.
Dieses Script hier generiert eine alphabetisch sortierte Liste der Artikel eines Verkäufers. Die Begriffe zum splitten kann man bei Bedarf dem Thema (Hier: Schallplatten) anpassen. Am Ende erhält man eine Datei namens liste, die das Ergebnis enthält und bequem per grep durchsucht werden kann.
Bash
Alles anzeigen#!/bin/bash page_start=1 page_end=600 if ! ls ebay_pages 1>/dev/null 2>&1 then mkdir ebay_pages cd ebay_pages echo "Lade Liste herunter.." for i in $(seq ${page_start} ${page_end}) do echo "Lade Seite ${i} von ${page_end}.." wget https://www.ebay-kleinanzeigen.de/s-bestandsliste.html\?userId\=15876736\&pageNum\=${i}\&sortingField\=SORTING_DATE 2>/dev/null done fi echo "" echo "Filtere.." grep -ri "Vinyl Sammlung hier" ebay_pages/ \ | cut -d "=" -f 7 \ | grep -i "\"\/" \ | sed 's/">Vinyl/\nVinyl/gi' \ | grep -vi "anzeige" \ | sed 's/"//gi' \ | sed 's/<\/a><\/h2>//gi' \ | sed 's/\/>//gi' \ | sed 's/Vinyl Sammlung hier//gi' \ | sed 's/ - Altenstadt Vorschau//gi' \ | sed 's/ LP //gi' \ | sed 's/ Maxi //gi' \ | sed 's/ Picture LP //gi' \ | sed 's/ Pic. LP //gi' \ | sed 's/ EP //gi' \ | sed 's/2xMaxi//gi' \ | sed 's/3xLP//gi' \ | sed 's/3LP//gi' \ | sed 's/3xBox//gi' \ | sed 's/&\;//gi' \ | sed 's/Hessen//gi' \ | sed -e 's/^[ \t]*//' \ | sort > /tmp/list echo "Entferne doppeltes.." # uniq, awk und co scheiterten, daher: # http://unix.stackexchange.com/questions/30173/how-to-remove-duplicate-lines-inside-a-text-file # (untereste antwort) unset llist; declare -A llist; while read -r line do if [[ ${llist[$line]} ]] then continue else printf '%s\n' "$line" llist[$line]="x" fi done < /tmp/list > liste echo "" echo "Fertig! Alphabetisch sortiert in der Datei liste"
-
Warum überprüfst du die Existenz von ebay_pages mit ls anstatt mit test und warum verwendest du seq statt Brace Expansion? sed kann auch mehrere Kommandos entgegennehmen, somit musst du nicht so viele Prozesse spawnen.
-
Ob ich test oder ls nehme ist am Ende doch wumpe, hauptsache am Ende kommt true oder false raus.
Ich hatte am Anfang ein großes sed mit per Semikolon getrennten Befehlen. Sah von der Lesbarkeit aber scheiße aus. Separate Prozesse sind kein Ding, laufen ja stur hintereinander statt parallel.
Bei Brace-Expansion wusste ich nicht dass das auch Variablen kann. Dachte, das ginge nur mit vordefinierten Zahlen.
-
Ob ich test oder ls nehme ist am Ende doch wumpe, hauptsache am Ende kommt true oder false raus.Ich meine, test wäre inzwischen ein Bash-Builtin, wegen Performance und so … bin mir aber nicht sicher.
Bei Brace-Expansion wusste ich nicht dass das auch Variablen kann. Dachte, das ginge nur mit vordefinierten Zahlen.Öhm… da war ich zu voreilig. Tatsächlich wird die Brace Expansion vor der Variablenevaluierung durchgeführt. Schon blöd irgendwie.
-
Interessant, test ist sowohl built-in, als auch Binary:
18:33 afeld@edithbook /home/afeld
% which test
test: shell built-in command18:33 afeld@edithbook /home/afeld
% ls -l /bin/test
-rwxr-xr-x 1 root root 47792 14. Mai 2016 /bin/test18:34 afeld@edithbook /home/afeld
% file /bin/test
/bin/test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=6f7cd350695eb9d8904597251f08bdc22e637ba9, stripped -
Ja, das ist natürlich ein Performance-Zugeständnis an die Bash-Nutzer. Eine spartanischere Shell wird auf die Binary zurückgreifen. Auch echo wird von der Bash selbst ausgeführt u.v.m.
-
Da ich gerne ein Software-RAID statt einem HW-RAID nutzen würde, muss ich auch meine ESP manuell rübernehmen bei nem Update von GRUB. Hier ein grobes Script. Wenn man was besser machen kann, bitte melden...
Bash
Alles anzeigen#!/bin/bash ESP_MOUNT_POINT="/boot/efi" MOUNTED_ESP_PARTITION=$(mount | grep "${ESP_MOUNT_POINT}" | cut -d' ' -f1) ESP_PARTITION_CANDIDATES=$(ls /dev/sd*1 | grep -v "${MOUNTED_ESP_PARTITION}") for CANDIDATE in $(echo ${ESP_PARTITION_CANDIDATES}); do # Getting the partition name by removing the /dev/ part and the disk by removing any digits partition_name=(${CANDIDATE//\/dev\//}) disk=(${partition_name//[[:digit:]]/}) echo "=== ${CANDIDATE}: Verifying possible ESP ===" # We don't want to f*ck up any external media ;-) if [[ $(find /dev/disk/by-id -lname "*${partition_name}") == *"usb"* ]]; then echo "WARNING: ${CANDIDATE} is on an external disk, skipping..." 1>&2 continue fi # Make sure this partition is *really* a candidate by checking the FSTYPE if [[ $(lsblk -f -o FSTYPE -n "${CANDIDATE}") != "vfat" ]]; then echo "WARNING: ${CANDIDATE} is not of type \"vfat\", skipping..." 1>&2 continue fi # Make sure candidate partition is *not* mounted if [[ $(mount | grep -q "${CANDIDATE}") ]]; then echo "WARNING: ${CANDIDATE} is already mounted. Won't attempt to update, skipping..." 1>&2 continue fi # Now, get to the meat! echo "=== ${CANDIDATE}: Updating ESP ===" echo "==> INFO: Update process started" echo "==> INFO: Mounting partition" temporary_mount_point="/mnt/tmp_${disk}_${partition_name}" mkdir -p "${temporary_mount_point}" mount "${CANDIDATE}" "${temporary_mount_point}" echo "==> INFO: Removing all contents" rm -rfv "${temporary_mount_point}"/* echo "==> INFO: Copying over the contents of the currently active ESP to this partition" cp -rpv "${ESP_MOUNT_POINT}/" "${temporary_mount_point}/" sync echo "==> INFO: Unmounting partition and removing mount point" umount "${temporary_mount_point}" rmdir "${temporary_mount_point}" echo done
-
Warum überhaupt Grub mit UEFI. Direkt von EFI aus booten.
-
Weil Debianstandardinstall und das Problem bleibt.
-
#installgentoo :>
-
https://github.com/YearOfProgramm…f0d6d3f4e428b2b
Keine Ahnung warum die tabs so abgefuckt sind aber egal
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!