[英]Command `cargo run` leads to "No such file or directory"
我需要运行以sudo
特权运行单独进程的测试(因为它们需要运行特权指令,例如shmat )。
我使用.cargo/config
运行测试sudo
,这就是导致错误的原因,删除它允许测试工作,直到它尝试shmat
时它失败。
在一个最小的可重现示例中,错误是:
thread 'tests::base' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/lib.rs:4:103
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
项目布局如下:
.
├── .cargo/
│ └── config.toml
├── Cargo.lock
├── Cargo.toml
└── src/
├── lib.rs
└── bin/
└── new_process.rs
config.toml
:
[target.x86_64-unknown-linux-gnu]
runner = 'sudo -E'
cargo.toml
:
[package]
name = "mre"
version = "0.1.0"
[dependencies]
libc = "0.2.127"
lib.rs
:
#[cfg(test)]
mod tests {
#[test]
fn base() {
let output = std::process::Command::new("cargo").args(["run","--bin","new_process"]).output().unwrap();
dbg!(output);
}
}
new_process.rs
:
fn main() {
let shmid = libc::shmget(libc::IPC_PRIVATE, 1024*4, libc::IPC_CREAT);
let shared_mem_ptr = libc::shmat(shmid, std::ptr::null(), 0);
println!("hello world");
}
如果您通过rustup安装 cargo,它可能会安装在您的主目录中,而不是像/usr/bin/
那样全局安装。
在我的机器上:
$ which cargo
/home/linus/.cargo/bin/cargo
所以在sudo下,没有找到cargo:
$ sudo cargo
sudo: cargo: command not found
这与unwrap
的Command::new().output()
的结果完全相同。 所以不是 rust 问题; 这是 linux 问题。
// in lib.rs base()
// Modify for the location of cargo on your machine
Command::new("/home/linus/.cargo/bin/cargo")
/usr/bin/cargo/
到/home/linus/.cargo/bin/cargo
的符号链接:sudo ln -s /home/linus/.cargo/bin/cargo /usr/bin/cargo
然后,货物也可以使用 sudo 找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.