---
name: "elvish-path"
section: "7"
platform: "linux"
package: "elvish"
version: "0.15.0-1+b5"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/elvish-path"
---

# elvish-path(7)

## Introduction

The `path:` module provides functions for manipulating and testing filesystem paths.

Function usages are given in the same format as in the reference doc for the builtin module.

## Functions

### path:abs

-

  ```
  path:abs $path
  ```

Outputs `$path` converted to an absolute path.

-

  ```
  ~> cd ~
  ~> path:abs bin
  ▶ /home/user/bin
  ```

### path:base

-

  ```
  path:base $path
  ```

Outputs the last element of `$path`. This is analogous to the POSIX `basename` command. See the Go documentation (https://pkg.go.dev/path/filepath#Base) for more details.

-

  ```
  ~> path:base ~/bin
  ▶ bin
  ```

### path:clean

-

  ```
  path:clean $path
  ```

Outputs the shortest version of `$path` equivalent to `$path` by purely lexical processing. This is most useful for eliminating unnecessary relative path elements such as `.` and `..` without asking the OS to evaluate the path name. See the Go documentation (https://pkg.go.dev/path/filepath#Clean) for more details.

-

  ```
  ~> path:clean ./../bin
  ▶ ../bin
  ```

### path:dir

-

  ```
  path:dir $path
  ```

Outputs all but the last element of `$path`, typically the path’s enclosing directory. See the Go documentation (https://pkg.go.dev/path/filepath#Dir) for more details. This is analogous to the POSIX `dirname` command.

-

  ```
  ~> path:dir /a/b/c/something
  ▶ /a/b/c
  ```

### path:eval-symlinks

-

  ```
  ~> mkdir bin
  ~> ln -s bin sbin
  ~> path:eval-symlinks ./sbin/a_command
  ▶ bin/a_command
  ```

Outputs `$path` after resolving any symbolic links. If `$path` is relative the result will be relative to the current directory, unless one of the components is an absolute symbolic link. This function calls `path:clean` on the result before outputing it. This is analogous to the external `realpath` or `readlink` command found on many systems. See the Go documentation (https://pkg.go.dev/path/filepath#EvalSymlinks) for more details.

### path:ext

-

  ```
  ext $path
  ```

Outputs the file name extension used by `$path` (including the separating period). If there is no extension the empty string is output. See the Go documentation (https://pkg.go.dev/path/filepath#Ext) for more details.

-

  ```
  ~> path:ext hello.elv
  ▶ .elv
  ```

### path:is-abs

-

  ```
  is-abs $path
  ```

Outputs `$true` if the path is an abolute path. Note that platforms like Windows have different rules than UNIX like platforms for what constitutes an absolute path. See the Go documentation (https://pkg.go.dev/path/filepath#IsAbs) for more details.

-

  ```
  ~> path:is-abs hello.elv
  ▶ false
  ~> path:is-abs /hello.elv
  ▶ true
  ```

### path:is-dir

-

  ```
  is-dir $path
  ```

Outputs `$true` if the path resolves to a directory. If the final element of the path is a symlink, even if it points to a directory, it still outputs `$false` since a symlink is not a directory. Use `eval-symlinks` on the path first if you don’t care if the final element is a symlink.

-

  ```
  ~> touch not-a-dir
  ~> path:is-dir not-a-dir
  ▶ false
  ~> path:is-dir /tmp
  ▶ true
  ```

### path:is-regular

-

  ```
  is-regular $path
  ```

Outputs `$true` if the path resolves to a regular file. If the final element of the path is a symlink, even if it points to a regular file, it still outputs `$false` since a symlink is not a regular file. Use `eval-symlinks` on the path first if you don’t care if the final element is a symlink.

-

  ```
  ~> touch not-a-dir
  ~> path:is-regular not-a-dir
  ▶ true
  ~> path:is-dir /tmp
  ▶ false
  ```
