pub fn is_executable(path: impl AsRef<Path>) -> Result<bool>
Expand description

Check if current process has permission to execute.

If path points to a directory, you’ll be checking if you have the right to enter it.

Errors

Same as access_syscall.

Examples

use permissions::is_executable;
use std::io;

fn main() -> io::Result<()> {
    assert!(is_executable("/usr/bin/cat")?);
    assert!(is_executable("/")?);
    assert!(is_executable("src/")?);
    assert!(!is_executable("src/lib.rs")?);
    assert!(!is_executable("/root")?);

    // may return `Err(kind: PermissionDenied)`
    // println!("{}", is_executable("/root/any")?);

    Ok(())
}
Examples found in repository?
examples/is_file_example.rs (line 13)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
fn main() -> io::Result<()> {
    // Asserts with files
    let this_program_path = env::args().next().unwrap();
    assert!(is_executable(&this_program_path)?);

    let this_file = "examples/example2.rs";
    assert!(is_readable(&this_file)?);

    let temp_file = "temp.txt";
    File::create(temp_file)?;
    assert!(is_writable(&temp_file)?);
    assert!(is_removable(&temp_file)?);
    fs::remove_file(temp_file)?;

    // -------------------------

    // Let's try with directories too
    let temp_directory = "temp/";
    fs::create_dir(temp_directory)?;
    assert!(is_readable(&temp_directory)?);
    assert!(is_writable(&temp_directory)?);
    assert!(is_executable(&temp_directory)?);
    assert!(is_removable(&temp_directory)?);
    fs::remove_dir(temp_directory)?;

    println!("Finished.");
    Ok(())
}