2009-11-06 5 views

Antwort

14

Es gibt einen "System" -Aufruf (oder etwas Ähnliches, aus dem Speicher), das Sie verwenden können, um ein beliebiges Programm auszuführen, das den Befehl mkdir enthalten könnte.

EDIT: Ich fand meine Programmierung in Lua Buch. Auf Seite 203 wird erwähnt, wie Sie einen

verwenden können, um einen Verzeichniserstellungsbefehl "vorzutäuschen".

EDIT 2: Beachten Sie Jonas Thiems Warnung, dass dieser Befehl missbraucht werden kann, wenn der Verzeichnisname von einer nicht vertrauenswürdigen Quelle stammt!

+9

Die Lua Design-Philosophie ist reine ISO C, so dass zu allem mit einem C-Compiler tragbar sein. Es gibt keine Verzeichniserstellungsfunktion in der C-Standardbibliothek. Dies bleibt plattformspezifischen Erweiterungen überlassen, wie mkdir (2) auf POSIX-Systemen und CreateDirectory *() unter Windows. –

+0

Danke;)! Ich wusste, dass ich diese Art von Ausführung ausführen konnte(), aber ich fragte mich, ob es eine Lua-Alternative gab ... ich denke, es gibt keine;)! – Wookai

+3

Diese Antwort ist ** sehr gefährlich **. Sobald dein dirname enthält; gefolgt von tatsächlichen Bash-Befehlen, stellen Sie sich für einen netten willkürlichen Befehlsausführungs-Exploit ein. Seien Sie sehr vorsichtig, um den dirname korrekt zu umgehen - oder überspringen Sie einfach diesen schlechten Rat und verwenden Sie stattdessen das LuaFileSystem, um die Dinge richtig zu machen. –

21

Sie können die LuaFileSystem Bibliothek nützlich finden. Es hat eine mkdir-Funktion.

require "lfs" 
lfs.mkdir("/path/to/dir") 
+0

Danke für den Link! Ich kann im Moment keine anderen Libraries benutzen, also werde ich bei der os.execute() Version bleiben, aber ich werde LuaFileSystem für das nächste Mal beachten! – Wookai

2

Sie können auch Lua/APR, die Apache Portable Runtime Bindung für Lua, betrachten. Die Dokumente finden Sie unter here

Einer der Gründe, warum ich Lua verwende, ist, dass ich Code schreiben kann, der über mehrere Betriebssysteme läuft. Ich habe LFS für einige Zeit verwendet, aber festgestellt, dass die Verwendung von Lua/APR eine plattformneutrale Bibliothek bietet. Und es gibt viele andere nützliche Routinen in der APR.

1

Sie können stattdessen das Paket paths verwenden. Dann können Sie einfach tun:

require 'paths' 

paths.mkdir('your/dir')