123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- From 6e0da103effe64832eea52fad5c44a328f7141b7 Mon Sep 17 00:00:00 2001
- From: Hongxu Jia <hongxu.jia@windriver.com>
- Date: Thu, 20 Jun 2019 17:31:11 +0800
- Subject: [PATCH] set viriable _drv not local
- If shebang is set to /bin/sh and /bin/sh is a symlink to /bin/bash,
- bash turn on posix mode.
- Since bash is upgraded to 5.0, it follows 'IEEE 1003.2 POSIX Shell
- Standard', to implement 'functions do not have local traps or options,
- and it is not possible to define local variables'
- For more detail, see variables.c:push_posix_temp_var in the following commit
- http://git.savannah.gnu.org/cgit/bash.git/commit/?id=d233b485e83c3a784b803fb894280773f16f2deb
- The IEEE 1003.2 POSIX Shell Standard:
- https://www.cs.ait.ac.th/~on/O/oreilly/unix/ksh/appa_02.htm
- While /bin/sh points to bash 5.0, it caused the following issue:
- $ cat <<ENDOF>case.sh
- fsck_drv_com(){
- echo "issuing \$_drv"
- }
- fsck_able() {
- _drv="_drv=e2fsck fsck_drv_com"
- }
- fsck_single() {
- local _drv
- fsck_able
- eval "\$_drv"
- }
- fsck_single
- ENDOF
- $ chmod a+x case.sh
- Unexpected:
- $ ./cash.sh
- issuing _drv=e2fsck fsck_drv_com
- Set viriable _drv not local, get expected result:
- $ ./case.sh
- issuing e2fsck
- Upstream-Status: Submitted [https://github.com/dracutdevs/dracut/pull/587]
- Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
- ---
- modules.d/99fs-lib/fs-lib.sh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- diff --git a/modules.d/99fs-lib/fs-lib.sh b/modules.d/99fs-lib/fs-lib.sh
- index d39ca1b..60877ee 100755
- --- a/modules.d/99fs-lib/fs-lib.sh
- +++ b/modules.d/99fs-lib/fs-lib.sh
- @@ -142,7 +142,7 @@ fsck_single() {
- local _fs="${2:-auto}"
- local _fsopts="$3"
- local _fop="$4"
- - local _drv
- + _drv=""
-
- [ $# -lt 2 ] && return 255
- # if UUID= marks more than one device, take only the first one
- --
- 2.7.4
|