UIDが少なくともであるxfs_quota -x -c 'limit bsoft=5g bhard=6g USER' /home
それぞれUSER
に対してコマンドを実行するには、実行するコマンドを表す文字列を作成するのではなく、$ID_minimum
まずそれらのユーザーを解析してから実際にコマンドを実行することを検討してください。
コマンド文字列を作成する場合は、eval
それを行う必要があります。これは手間がかかり、間違いやすいです。ユーザー名のリストを取得して、コマンドを実行することをお勧めします。
getent passwd |
awk -F: -v min="${ID_minimum:-1000}" '$3 >= min && $1 != "nfsnobody" { print $1 }' |
while IFS= read -r user; do
xfs_quota -x -c "limit bsoft=5g bhard=6g $user" /home
done
後の引数を一重引用符で囲む必要は実際にはないことに注意してください-c
。ここでは二重引用符を使用してい$user
ます。これは、によって抽出された値を含む変数をシェルで展開するためですawk
。
コマンドで変数に${ID_minimum:-1000}
値を与えるときに使用しmin
ますawk
。これは、の値$ID_minimum
、または1000
その変数が空であるか設定されていない場合に展開されます。
本当にしたい場合は、上記のループでコマンドを実行する代わりにコマンドを出力することができます。
getent passwd |
awk -F: -v min="${ID_minimum:-1000}" '$3 >= min && $1 != "nfsnobody" { print $1 }' |
while IFS= read -r user; do
printf 'xfs_quota -x -c "limit bsoft=5g bhard=6g %s" /home\n' "$user"
done
出力されたコマンド文字列で(一重引用符の代わりに)二重引用符を使用しても、生成されたコマンドをeval
他の方法で実行した場合、シェルが混乱することはありません。気になる場合は、printf
上記の最初の引数で一重引用符と二重引用符を入れ替えてください。