2

特定のアクションを実行するためにluaスクリプトの現在の作業ディレクトリを変更する必要がありますが、この単純なタスクで問題が発生します。私はテストスクリプトtest.luaを書きます:

os.execute("cd /usr")
os.execute("ls")

ただし、luatest.luaの出力は次のとおりです。

test.lua

現在のディレクトリは変更されません。何が問題なのですか?そして、私はLFSまたは非標準モジュールを使用できません。


状況を説明してくれてありがとう。私は別の方法を選択します:luaスクリプトを実行する前に作業ディレクトリを変更しますが、スクリプトで使用するパスとスクリプトで多くの問題が発生します。

4

5 に答える 5

5

Unixではos.execute()、子プロセスとその子を生成します。jpjacobsの答えでは、最初のプロセスがシェルを実行します。

ディレクトリ変更操作は子プロセスにのみ影響し、Luaインタープリターがプログラムを実行しているプロセスには影響しません。

于 2011-12-19T13:13:08.703 に答える
3

外部ライブラリなしでは不可能です。あなたは次のようなものを使うことができます

os.execute("cd /usr/ && ls")
于 2011-12-19T13:04:39.547 に答える
2

Lua標準ライブラリは、小型でポータブルであることを目的としています。したがって、一部の機能を除くすべてのC標準ライブラリの機能に基づいています。ディレクトリを変更する機能はありません。そのため、LFSのようなライブラリが存在します。

Luaはあなたのニーズに適した言語ではないかもしれないとあなたは考えましたか?非標準モジュールのロードが許可されていない環境でシェルスタイルのスクリプト作業を行っている場合は、PythonまたはPerlの方が適している可能性があります。どちらも、多くの機能を備えた広範な標準ライブラリを備えており、すべて非標準モジュールをダウンロードする必要はありません。

Luaで実際のシェルスタイルのスクリプトを実行する場合は、モジュールが必要です。とても簡単です。したがって、外部モジュールを使用するか、別の言語を使用する必要があります。

于 2011-12-19T17:26:43.337 に答える
1

これはちょっとしたハックですが、現在のフォルダーに必要なフォルダーへのシンボリックリンクを作成してみたので、現在のフォルダーをまったく変更する必要はありませんか?

os.execute("ln -s /usr/foo") -- link called "foo" in current dir
os.execute("ln -s /usr/bar") -- link called "bar" in current dir

baz = require('foo.baz') -- loading file /usr/foo/baz.lua
于 2011-12-20T08:21:37.063 に答える
0

ZerobranieLua5.2を使用して作成されたプログラムは次のとおりです。

local sP = "E:/Documents/Lua-Projs/SVN/ScriptsWireE2"
local a, b, c = os.execute("cd "..sP.."&& dir")
print(a,b,c)

そして、アウトプット:

Програма 'lua.exe' пусната в 'E:\Documents\Lua-Projs\ZeroBraineIDE\ZeroBraineProjects' (pid: 8832).
 Volume in drive E is Data
 Volume Serial Number is DE34-ED00

 Directory of E:\Documents\Lua-Projs\SVN\ScriptsWireE2

08-03-2016  18:25    <DIR>          .
08-03-2016  18:25    <DIR>          ..
17-03-2016  18:15    <DIR>          Bridges
07-03-2016  18:21            11 558 license
07-03-2016  18:21                87 readme.md
               2 File(s)         11 645 bytes
               3 Dir(s)  181 729 161 216 bytes free
true    exit    0
Програмата завършена за 0.06 секунди (pid: 8832).
于 2018-08-28T08:48:25.430 に答える