我正在尝试创建一个小的安装脚本,要求用户输入自己的IP地址......我正在尝试将默认IP地址设置为连接的SSH会话的IP地址。
当我在命令行中运行${SSH_CLIENT%% *}
时,它显示99.99.99.99: command not found
,当我执行echo ${SSH_CLIENT%% *}
时,它只显示99.99.99.99
(其中99.99.99.99
是我的实际WAN IP)...
但是,以下代码(在bash脚本中运行时)显示
[6/9] Enter your public IP address. (eg. ) :
declare CONNECTED_IP=${SSH_CLIENT%% *}
read -e -p "[6/9] Enter your public IP address. (eg. $CONNECTED_IP) : " ipAddress
[ -z "$ipAddress" ] && ipAddress=$CONNECTED_IP
更新1
经过进一步审查,它确实有效...除了我用sudo
运行脚本时。有人可以向我解释这种行为并且有解决方法吗?
更新2
因此,有人解释说,这种行为是由于切换用户时不保留环境变量(sudo
),并且在执行脚本以保存环境时我可以使用-E
标志。
不幸的是,这是一个将被共享的脚本,因此我无法确保用户使用-E
标志执行脚本。此外,我甚至不知道他们是否会使用sudo
。
也就是说,我正在寻找一种一致的方法来获取通过SSH连接的用户的IP地址。
使用sudo
时变量未显示的原因是,当您从其他用户切换时,它不会自动保留环境。您可以使用-E
sudo选项来保留当前环境。
$ sudo -E ./script.sh
应该按预期显示ip。
-E, - preserve-env向安全策略指示用户希望保留其现有环境变量。如果用户没有保留环境的权限,安全策略可能会返回错误。