我有一个可以复制权限的脚本,它工作得很好,这是一个有趣的行:
...
bash commands.sh $PAM_USER "medium" /bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed} /usr/bin/{vim,touch,java,python,gcc,awk,make}
...commands.sh有一个循环,它读取列出的所有权限,并将它们复制到指定的目录中。当我试图从一个配置文件读取权限时,也会出现同样的问题。
我的配置文件包含以下内容:
MEDIUM_PERMISSIONS_BIN=/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
MEDIUM_PERMISSIONS_USR_BIN=/usr/bin/{vim,touch,java,python,gcc,awk,make}
MEDIUM_ENVIROMENT_LIFESPAN=midnight
MEDIUM_PERSISTENT_HOME=true注意:最后两种配置是不同的,现在我正试着正确地阅读前两行。
我将配置文件添加到前面的脚本中,并尝试执行以下操作:
source /etc/users/config.cfg
...
bash commands.sh $PAM_USER "medium" $MEDIUM_PERMISSIONS_BIN $MEDIUM_PERMISSIONS_USR_BIN
...问题是,循环是这样读取它的:
loop: /bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
loop: /usr/bin/{vim,touch,java,python,gcc,awk,make}以前,当它将其读取为/bin/ls、/bin/rm、/bin/rm等时,因此循环能够找到这些命令,因此它能够找到第一个版本,而不是在第二个版本中,前面指定的输出不正确。
我已经阅读了sed和awk命令,但我对这些命令非常陌生,无法让它们工作。
如何读取配置文件中的权限,就像在第一个版本中直接介绍它们一样?
谢谢
编辑: commands.sh代码:
#!/bin/bash
CHROOT="/users/$2/$1"
if [ ! -d "$CHROOT/home/$1" ]; then
mkdir -p "$CHROOT/home/$1"
fi
for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
do
cp -v --parents $i $CHROOT
done
#ARCH amd64
if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
cp --parents /lib64/ld-linux-x86-64.so.2 /$CHROOT
fi
#ARCH i386
if [ -f /lib/ld-linux.so.2 ]; then
cp --parents /lib/ld-linux.so.2 /$CHROOT
fi
clear
cd注释:我删除了所有调试回波。这段代码很大程度上是从下面的代码中复制出来的:https://linuxconfig.org/how-to-automatically-chroot-jail-selected-ssh-user-logins
发布于 2018-12-03 11:27:30
您正在尝试定义数组变量,但正在使用字符串的格式:
## This will define a string variable
$ MEDIUM_PERMISSIONS_BIN=/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
$ echo $MEDIUM_PERMISSIONS_BIN
/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
## The parentheses tell the shell this is an array
$ MEDIUM_PERMISSIONS_BIN=(/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed})
$ echo $MEDIUM_PERMISSIONS_BIN ## the 1st element of the array
/bin/ls
$ echo ${MEDIUM_PERMISSIONS_BIN[@]} ## the entire array
/bin/ls /bin/rm /bin/bash /bin/nano /bin/mkdir /bin/kill /bin/ln /bin/ps /bin/grep /bin/sed因此,只需将配置文件更改为:
MEDIUM_PERMISSIONS_BIN=(/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed})
MEDIUM_PERMISSIONS_USR_BIN=(/usr/bin/{vim,touch,java,python,gcc,awk,make})
MEDIUM_ENVIROMENT_LIFESPAN=midnight
MEDIUM_PERSISTENT_HOME=true然后,在脚本中使用"${MEDIUM_PERMISSIONS_BIN[@]}"。
https://unix.stackexchange.com/questions/485664
复制相似问题