我编写了一个硬盘自动挂载程序。
该软件使用 ssh 向目标机器发出请求。其理念是将新安装的硬盘自动添加到 fstab 中。
我已经使所有工作正常,fstab 行条目已准备好附加到文件中。
我正在尝试在我的软件中添加如下内容:
command.RunCommandSudo($"echo \"{mountstring}\" >> /etc/fstab");
产生以下格式的 ssh 查询:
sudo echo "UUID=X /mnt/test ext4 defaults 0 1" >> /etc/fstab
=> 权限被拒绝
什么方法比较合适?我怀疑自动化软件是否应该使用文本编辑器(例如 nano)?
答案1
另一种方法是使用tee
命令。
NAME
tee - read from standard input and write to standard output and files
SYNOPSIS
tee [OPTION]... [FILE]...
DESCRIPTION
Copy standard input to each FILE, and also to standard output.
-a, --append
append to the given FILEs, do not overwrite
因此,对于您的命令,您可以这样做:
echo "UUID=X /mnt/test ext4 defaults 0 1" | sudo tee -a /etc/fstab
答案2
像这样
sudo su -c "echo 'UUID=X /mnt/test ext4 defaults 0 1' >> /etc/fstab"
请注意,这样的脚本应该由 root 用户使用,而不是管理员,因此这会导致 sudo 无法使用。
我更喜欢这样做:
grep -q '/mnt/test' /etc/fstab ||
printf 'UUID=X /mnt/test ext4 defaults 0 1\n' >> /etc/fstab
使用 root 用户来执行此操作。