将字符串块读取为多个变量ubuntu

将字符串块读取为多个变量ubuntu

我有一个复制权限的脚本,效果很好,这是有趣的一行:

...
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等等,因此循环适用于第一个版本,因为它能够找到这些命令,但不能适用于第二个版本,因为先前指定的输出不正确。

我已经读过sedawk命令,但我对此很陌生,无法让它们工作。

如何从我的配置文件中读取权限,就像我像第一个版本一样直接引入它们?

谢谢

编辑: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

答案1

您正在尝试定义一个数组变量,但正在使用字符串的格式:

## 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[@]}".

相关内容