所以我有一个 bash 脚本,它将扫描一个目录并在选定的输入上运行一个函数。
echo -n "
-------------------------------------------------------
`hostname` Menu
-------------------------------------------------------
Choose your desired Host:
`
i=1
for D in /var/www/*.*/;
do
if [[ -d $D ]]; then
Hosts[$i]=$D
echo $i') ' $D
i=$(($i+1))
fi
done
`
"
read -p "Select: " Input
Directory="${Hosts[$Input]}";
ChangePerms;
似乎由于某种原因, key 没有正确地从数组中设置。
Choose your desired Host:
1) /var/www/example1.com/
2) /var/www/example2.com/
+ read -p 'Select: ' Input
Select: 1
+ Directory=
+ ChangePerms
+ true
我错过了什么?非常感谢所有帮助!
编辑: 作为旁注,我可以单独运行命令并获得结果。
root@web005:/# i=1
root@web005:/# for D in /var/www/*.*/;
> do
> if [[ -d $D ]]; then
> Hosts[$i]=$D
> echo $i') ' $D
> i=$(($i+1))
> fi
> done
1) /var/www/example1.com/
2) /var/www/example2.com/
root@web005:/# read -p "Select: " Input
Select: 1
root@web005:/# Directory="${Hosts[$Input]}";
root@web005:/# echo $Directory
/var/www/example1.com/
root@web005:/#
这里是为像我一样被卡住的人准备的工作代码:
echo -n "
-------------------------------------------------------
`hostname` Menu
-------------------------------------------------------
Choose your desired Host:
"
i=1
for D in /var/www/*.*/;
do
if [[ -d $D ]]; then
Hosts[$i]=$D
echo $i') ' $D
i=$(($i+1))
fi
done
read -p "Select: " Input
Directory="${Hosts[$Input]}";
ChangePerms;
最佳答案
你的问题是:
`
i=1
for D in /var/www/*.*/;
do
if [[ -d $D ]]; then
Hosts[$i]=$D
echo $i') ' $D
i=$(($i+1))
fi
done
`
在 subshell
中执行。因此,脚本的其余部分不知道 Hosts
是什么。 (换句话说,Hosts
在脚本的主体中是空的)。在显示菜单之前填写 Hosts
。
关于arrays - 来自用户输入的 Bash 数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536739/