문자열 블록을 여러 변수로 읽기 우분투

문자열 블록을 여러 변수로 읽기 우분투

권한을 복사하는 스크립트가 있는데 잘 작동합니다. 흥미로운 내용은 다음과 같습니다.

...
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}

이전에는 다음과 같이 자주 읽혔습니다./빈/ls,/bin/rm,/bin/rm따라서 루프는 명령을 찾을 수 있기 때문에 첫 번째 버전에서는 작동하지만 이전에 지정된 출력이 올바르지 않기 때문에 두 번째 버전에서는 작동하지 않습니다.

내가 읽고sed그리고명령을 실행했지만 저는 이 기능이 처음이라 작동하게 할 수 없습니다.

첫 번째 버전처럼 직접 가져온 것처럼 구성 파일에서 권한을 어떻게 읽을 수 있나요?

감사해요

편집: 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[@]}".

관련 정보