bash - Sammenkædel flere Markdown-filer ved hjælp af Pandoc på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har flere Markdown (.md) filer i en mappe, og jeg vil sammenkæde dem og få en endelig Markdown-fil ved hjælp af Pandoc. Jeg skrev en bash fil som denne:


#!/bin/bash 
pandoc *.md > final.md


Men jeg får følgende fejl, når jeg dobbeltklikker på den:



  pandoc: * .md: openBinaryFile: ugyldigt argument (ugyldigt argument)



og filen final.md er tom.


Hvis jeg prøver dette:


pandoc file1.md file2.md .... final.md 


Jeg får de resultater, jeg forventer: en final.md fil med indholdet af alle de andre Markdown-filer.


På macOS fungerer det fint. Hvorfor virker dette ikke på Windows?

Bedste reference


På Unix-lignende skaller (som bash, for hvilket dit script er skrevet) globudvidelse (f.eks. Dreje *.md til file1.md file2.md file3.md) udføres af skallen, ikke det program du kører. Din ansøgning ser den endelige liste over filer, ikke wildcard. [12]


Men udvidelse af glob i cmd.exe udføres af applikationen :



  Windows kommandotolkeren cmd.exe er afhængig af en runtime-funktion i applikationer til at udføre globbing. [13] [14]



Som følge heraf bliver Pandoc bestået en bogstavelig *.md, når den forventer at se en liste over filer som file1.md file2.md file3.md. Det ved ikke, hvordan man udvider globen selv og forsøger at åbne en fil, hvis navn er *.md.


Du skal kunne køre din bash script i en unix-lignende shell som Cygwin eller bash på Windows. Det kan også arbejde på PowerShell, selvom jeg ikke har en maskine, der er praktisk at teste. Som en sidste udvej kan du springe igennem nogle hoops til at skrive en batchfil, der udvider globen og sender filnavne til Pandoc. [15] [16]