# Zig でシェルを立ち上げる


published: 2025-10-13

Zig へ入門して5日目に書いたコード。考慮漏れあるかも


## バージョン

```bash
$ zig version
0.15.1

```

## コード

### `src/main.zig`

```zig
const std = @import("std");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    // zsh を立ち上げる
    const argv = &[_][]const u8{"zsh"};
    var child = std.process.Child.init(argv, allocator);

    // カレントディレクトリで
    child.cwd_dir = std.fs.cwd();

    // 環境変数をセット
    var envmap = try std.process.getEnvMap(allocator);
    try envmap.put("AAA", "bbb");
    defer envmap.deinit();
    child.env_map = &envmap;

    // 立ち上げ
    const term = try child.spawnAndWait();
    std.debug.print("exit code: {d}\n", .{term.Exited});
}

```

### `.gitignore`

```gitignore
# misc
.DS_Store

# zig
.zig-cache
zig-out

```

### `build.zig`

```zig
const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    const exe = b.addExecutable(.{
        .name = "tryapp",
        .root_module = b.createModule(.{
            .root_source_file = b.path("src/main.zig"),
            .target = target,
            .optimize = optimize,
            .imports = &.{},
        }),
    });
    b.installArtifact(exe);

    // run
    const run_step = b.step("run", "Run the app");
    const run_cmd = b.addRunArtifact(exe);
    run_step.dependOn(&run_cmd.step);
    run_cmd.step.dependOn(b.getInstallStep());
    if (b.args) |args| {
        run_cmd.addArgs(args);
    }
}

```

### `build.zig.zon`

```zon
.{
    .name = .tryapp,
    .version = "0.0.0",
    .fingerprint = 0x827b1b10e971a3d0,
    .minimum_zig_version = "0.15.1",
    .dependencies = .{},
    .paths = .{
        "build.zig",
        "build.zig.zon",
        "src",
    },
}

```

### memos

std.process.Child.init

mark: `src/main.zig:10`

- [ziglang.org/documentation/0.15.1/std/#std.process.Child.init](https://ziglang.org/documentation/0.15.1/std/#std.process.Child.init)
std.fs.cwd

mark: `src/main.zig:13`

- [ziglang.org/documentation/0.15.1/std/#std.fs.cwd](https://ziglang.org/documentation/0.15.1/std/#std.fs.cwd)
std.process.getEnvMap

mark: `src/main.zig:16`

- [ziglang.org/documentation/0.15.1/std/#std.process.getEnvMap](https://ziglang.org/documentation/0.15.1/std/#std.process.getEnvMap)
std.process.Child.spawnAndWait

mark: `src/main.zig:22`

- [ziglang.org/documentation/0.15.1/std/#std.process.Child.spawnAndWait](https://ziglang.org/documentation/0.15.1/std/#std.process.Child.spawnAndWait)
## 実行

```bash
$ zig build run

$ printenv | grep AAA
AAA=bbb

$ exit
exit code: 0

```

