文字列ブロックを複数の変数として読み取る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

注:最後の2つの構成は異なるため、最初の2行を正しく読み取ろうとしています。

前のスクリプトに設定ファイルを追加し、次のコマンドを実行してみました。

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したがって、ループはコマンドを見つけることができるため、最初のバージョンでは機能しますが、以前に指定された出力が正しくないため、2番目のバージョンでは機能しません。

私が読んで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[@]}"

おすすめ記事