如何提取Shell命令输出的第二个单词?解决usermod配置zsh报错
解决Shell脚本中提取
whereis输出第二个单词的问题 首先咱们先理清你原命令出错的根源:whereis -b zsh的输出带了前缀zsh:,你直接把整个输出串传给usermod,导致命令里混入了zsh:这个无效参数,这才触发了zsh: command not found错误;另外你的usermod命令还多传了一次路径参数,语法本身就不符合要求(usermod -s只需要指定shell路径和用户名两个参数)。
提取第二个单词的几种实用方法
要拿到whereis -b zsh输出里的第二个单词(也就是/usr/bin/zsh),这几个Shell工具都能轻松实现:
用
awk(最推荐,语法直观清晰):zsh_path=$(whereis -b zsh | awk '{print $2}')awk会自动按空格分割输出内容,$2就对应第二列的内容,正好是你需要的路径。用
cut:zsh_path=$(whereis -b zsh | cut -d' ' -f2)-d' '指定分隔符为空格,-f2表示提取第二个字段。用
sed:zsh_path=$(whereis -b zsh | sed 's/^zsh: //;s/ .*//')这个命令先移除开头的
zsh:前缀,再删掉第一个空格后的所有内容,剩下的就是目标路径。
修正后的完整健壮脚本
把提取到的路径正确传给usermod,同时增加有效性检查避免异常,脚本可以这么写:
#!/bin/bash # 提取zsh的可执行文件路径 zsh_path=$(whereis -b zsh | awk '{print $2}') # 检查路径是否有效,防止空参数或无效路径导致命令失败 if [ -z "$zsh_path" ] || [ ! -f "$zsh_path" ]; then echo "错误:未找到有效的zsh可执行文件" exit 1 fi # 修改当前用户的默认shell sudo usermod -s "$zsh_path" "$(whoami)"
内容的提问来源于stack exchange,提问作者Aesop
相关产品推荐
相关产品推荐

