我正在使用一个变量来组合命令: 编辑 1:使用 cmd='sudo -i -u $domain wp --path=$path' 的示例;echo $cmd |bash 尝试执行上述操作时出现错误。 我试过使用'single quotes'和"double quotes"而不是(parent ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我的问题实际上是一个bash
问题,即使它涉及安装磁盘。
在创建VM的过程中,通过脚本安装了该磁盘:
sudo mount -t ext4 /dev/sdb /data
而且我想在每次系统启动时都保留它。 使此安装变为自动。 我了解到我必须为此编辑/etc/fstab
文件:在其上添加一行。
挂载磁盘后,必须运行命令:
$ sudo blkid /dev/sdb
/dev/sdb: UUID="238d1293-918e-42e1-a081-a41f497636d0" TYPE="ext4"
要获取UUID,我需要在我的/etc/fstab
文件中附加的行中提及:
UUID=238d1293-918e-42e1-a081-a41f497636d0 /data ext4 defaults 0 0
我的问题是:我可以通过bash
解析blkid
命令的结果,从/dev/sdb: UUID="238d1293-918e-42e1-a081-a41f497636d0" TYPE="ext4"
捕获部分UUID="238d1293-918e-42e1-a081-a41f497636d0"
/dev/sdb: UUID="238d1293-918e-42e1-a081-a41f497636d0" TYPE="ext4"
内容并将其存储到变量中?
使用参数替换:
uuid=$(sudo blkid /dev/sdb)
uuid=${uuid#*UUID=\"} # Remove from left up to UUID="
uuid=${uuid%%\"*} # Remove from right from the leftmost "
echo "$uuid"
Bash的内置正则表达式支持适用于任务。 在下面的函数中,我们针对正则表达式UUID="([^"]+)"
测试blkid
的输出,如果找到匹配项,则发出匹配组内容(括号内的所有内容):
uuid_for_device() {
local uuid_re blkid_text # Declare our locals so we don't leak into global scope
uuid_re='UUID="([^"]+)"' # Save the regex to a variable; less gotchas this way
blkid_text=$(sudo blkid "$1") || return # Collect the data we're going to match against
[[ $blkid_text =~ $uuid_re ]] && echo "${BASH_REMATCH[1]}" # Emit output if regex matches
}
...将在给定uuid_for_device /dev/sda
发出所需的UUID,您可以像往常一样将其捕获到变量中( sda_uuid=$(uuid_for_device /dev/sda)
)。
也就是说,对于您的实际用例,最好只使用一种更合适的工具来完成工作:
uuid_for_device() { findmnt -n -o UUID "$1"; }
sda_uuid=$(uuid_for_device /dev/sda)
或者,当然,简单地:
sda_uuid=$(findmnt -n -o UUID /dev/sda)
使用sed:
YOUR_COMMAND | sed -e 's/.*UUID="\([0-9a-f-]*\)".*/\1/'
您可以使用反引号来存储它:
a=`YOUR_COMMAND | sed -e 's/.*UUID="\([0-9a-f-]*\)".*/\1/'`
echo $a
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.