我正在尝试创建一个小的安装脚本,要求用户输入自己的IP地址......我正在尝试将默认IP地址设置为连接的SSH会话。
当我在命令行中运行${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地址。
答案 0 :(得分:1)
变量在使用sudo
时未显示的原因是,当您从其他用户切换时,它不会自动保留环境。您可以使用-E
sudo选项来保留当前环境。
$ sudo -E ./script.sh
应按预期显示IP。
-E, - pre-env 指示用户希望保留的安全策略 他们现有的环境变量。安全政策可以 如果用户没有保留权限,则返回错误 环境。