Bash: Tabelle mit 5 Spalten aus Ordnernamen in einem Ordner erstellen


  • Mod

    @ShredderButtonOn sagte in Bash: Tabelle mit 5 Spalten aus Ordnernamen in einem Ordner erstellen:

    @siri sagte in Bash: Tabelle mit 5 Spalten aus Ordnernamen in einem Ordner erstellen:

    das sofortige Beenden des Programms ist nicht schwer zu realisieren

    set -e

    Ihr versteht beide nicht: Das Problem ist doch, dass bei den unerwarteten Parameterexpansionen eben kein formeller Fehler auftritt, aber das Programm was katastrophal falsches tut. Siehe wobs Beispiel.



  • Es geht hier ja gerade u. a. um Quotes und Randfälle ... Ich denke, ich spinne langsam. Wollte vorhin einen git commit via bash machen, mit dem Text "Update". Daraus geworden ist aber:

    ÂUpdate

    Das ist ein ^+A (das 1. Zirkumflex im Französischen) ... Ich kann schnell und mit zehn Fingern schreiben. Mit Sonderzeichen tue ich mich aber schwer. Dennoch glaube ich, dass etwas mit meinem System nicht stimmen könnte ... denn ich hätte unbemerkt Shift+^+A+"+Update+" eingegeben haben müssen. Das scheint mir für eine versehentliche Handlung zu kompliziert zu sein.

    Worauf will ich hinaus? Ich traue meinem Windows System nicht ganz, vielleicht ein Virus, Keylogger oder Ähnliches?

    Ok, vielleicht hab ich auch einfach nur zu wenig geschlafen.



  • @ShredderButtonOn sagte in Bash: Tabelle mit 5 Spalten aus Ordnernamen in einem Ordner erstellen:

    Ok, vielleicht hab ich auch einfach nur zu wenig geschlafen.

    Du hast zu wenig geschlafen.

    @SeppJ ich werde jetzt nicht alles umgestallten, nur weil die Parameter Expansion in geringen Fällen zu einem total Down-Crash geraten. Mit Bash schießt du dir eh fast überall in den Fuß. Wenn du richtig codest, ziemlich unwahrscheinlich. Bash Skripte gelten getestet zu werden, und ich habe wie gesagt kein Problem damit wenn du entweder dirname oder realpath oder basename als Sanitizer-Funktion bewahrst.



  • Nabend.

    Es geht wieder um die Eingangsfrage ... So hätte ich mir das vorgestellt (hier eine Java-Snippet). Aber vermutlich ist die folgende Logik für ein bash-Script einfach zu kompliziert ...

        public static void table(String dir, int cols, int overheadAt) {
            File[] files = new File(dir).listFiles();
            assert files != null;
            int n1 = files.length / cols;
            int n2 = files.length % cols;
            String[][] table = new String[n1 + n2][cols];
            for (String[] a : table) {
                Arrays.fill(a, " ".repeat(10));
            }
            for (int i = 0; i < overheadAt; i++) {
                for (int j = 0; j < n1; j++) {
                    String s = getString(files, n1 * i + j);
                    table[j][i] = s;
                }
            }
            for (int j = 0; j < n1 + n2; j++) {
                String s = getString(files, n1 * overheadAt + j);
                table[j][overheadAt] = s;
            }
            for (int i = overheadAt + 1; i < cols; i++) {
                for (int j = n2; j < n1 + n2; j++) {
                    String s = getString(files, n1 * i + j);
                    table[j - n2][i] = s;
                }
            }
            for (String[] a : table) {
                System.out.println(Arrays.toString(a));
            }
        }
    
        private static String getString(File[] a, int i) {
            return a[i].getName().substring(0, 10);
        }
    

    Ich wüsste jedenfalls nicht, wie das geschickt in Bash möglich wäre...


Anmelden zum Antworten