为什么 F5 Big IP CLI 自创建的文件脚本不起作用,尽管命令可以从终端运行?

为什么 F5 Big IP CLI 自创建的文件脚本不起作用,尽管命令可以从终端运行?

这是我的脚本,保存为 f5cli 和 chmod +x f5cli 可执行文件。我使用 F5FPC_HOST 环境变量来选择主机 url 的值

#!/bin/sh

user=$(echo "" | dmenu -p "Enter user:")
secret="'$(echo "" | dmenu -P -p  "Enter secret(PIN, OTP, Password):")'"

f5fpc --start -u $user -p $secret -t $F5FPC_HOST

变量值的替换不是问题,我已经通过在 echo/notify-send 中打印数据来验证。我尝试将 bin/sh 更改为 bin/zsh 或 bin/bash。

在终端中运行的命令

f5fpc --start -u user -p 'XXXX123456PASSWORD' -t https://abc.com

答案1

你可以这样做:

user="$(printf "" | dmenu -p "Enter user:")"
pass="$(printf "" | dmenu -P -p "Enter secret(PIN, OTP, Password):")"

f5fpc --start -u "$user" -p "$pass" -t "$F5FPC_HOST"

用于printf ""防止 dmenu 将 stdin 作为列表读取。echo将附加一个换行符,并将dmenu其视为空列表条目。

除此之外,您应该检查是否f5fpc覆盖 argv 中的密码 - 以便它不会通过使用例如ps.

f5fpc如果是这种情况,最好在 shell 中打开该脚本并输入密码。

答案2

得到修复。谢谢穆鲁指出报价问题。

#!/bin/sh

user=$(echo "" | dmenu -p "Enter user:")
secret="$(echo "" | dmenu -p  "Enter secret(PIN, OTP, Password):")"

cmd="f5fpc --start -u $user -p '$secret' -t $F5FPC_HOST"

eval "$cmd"

相关内容