FreeIPA设置用户密码过期时间:Bash变量传参失败排查
问题原因与解决方法
你的核心错误是在变量中额外添加了单引号——手动执行时的单引号只是Shell用来避免空格拆分的语法,并非参数本身的一部分,导致ipa命令收到的参数格式不符合要求。
两种尝试的具体问题
第一种写法:
new_date="'$(date +"%F %T" -d "+90 days")Z'"; echo $new_date; ipa user-mod username --password-expiration=$(echo $new_date)- 变量
new_date包含了单引号,当用$(echo $new_date)传递参数时,Shell解析会把单引号作为参数的一部分,甚至因空格和单引号的组合将参数拆分成多个部分,触发command 'user_mod' takes at most 1 argument错误。
- 变量
第二种写法:
export new_date="'$(date +"%F %T" -d "+90 days")Z'"; echo "${new_date}"; ipa user-mod username --password-expiration="${new_date}"- 变量里依然带有单引号,传递给ipa的参数是
'2023-07-24 07:52:14Z'(包含单引号),而ipa要求的格式是不带单引号的纯日期字符串,因此格式验证失败。
- 变量里依然带有单引号,传递给ipa的参数是
正确写法
直接生成符合要求的日期格式字符串,无需额外添加单引号,传递参数时用双引号包裹变量即可:
# 生成带Z后缀的正确日期格式 new_date=$(date +"%F %TZ" -d "+90 days") # 执行修改命令,双引号包裹变量避免空格拆分 ipa user-mod username --password-expiration="${new_date}"
也可以把Z直接整合到date的格式参数里,效果完全一致:
new_date=$(date +"%Y-%m-%d %H:%M:%SZ" -d "+90 days") ipa user-mod username --password-expiration="${new_date}"
内容的提问来源于stack exchange,提问作者Unpossible
相关产品推荐
相关产品推荐

