Revert "terminal.bbclass: use var-SHELL as the shebang of wrapper script"
PATCH 1/1 Revert "terminal.bbclass: use var-SHELL as the shebang of wrapper script"
The $SHELL environment variable is used for the user's preferred interactive shell. This shall not be used when executing shell scripts that expect POSIX shell syntax as there is no guarantee that it is a POSIX compatible shell.
This reverts commit 27e2ede65f1193e49f9483b08a55495d88740a65.
---
In my case, $SHELL is set to /bin/zsh, with the result that devshell fails to start. If there is some problem with devshell related to /bin/sh being linked to dash rather than bash (which the original commit indicates), then that should be adressed instead.
Hongxu: Do you have any additional information related to why you made the change in the first place?
meta/classes/terminal.bbclass | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
meta/classes/terminal.bbclass +1 -2
@@ -25,8 +25,7 @@ def emit_terminal_func(command, envdata, d): bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: - script.write('#!/usr/bin/env %s\n' % d.getVar('SHELL')) - script.write('set -e\n') + script.write('#!/bin/sh -e\n') bb.data.emit_func(cmd_func, script, envdata) script.write(cmd_func) script.write("\n")
Signature · 1 line
2.12.0
Quoted 4 lines · Peter Kjellerstedt
The $SHELL environment variable is used for the user's preferred interactive shell. This shall not be used when executing shell scripts that expect POSIX shell syntax as there is no guarantee that it is a POSIX compatible shell.
There is a sanity check to `/bin/sh' to dash or bash
`eaa0dc2 sanity.bbclass: Only verify /bin/sh link if it's a link'
`ecdfdd7 sanity.bbclass: check /bin/sh is dash or bash'
Quoted 5 lines
This reverts commit
27e2ede65f1193e49f9483b08a55495d88740a65.Signed-off-by Peter Kjellerstedt <[email protected]>---
Quoted 7 lines
In my case, $SHELL is set to
/bin/zsh, with the result that devshell fails to start. If there is some problem with devshell related to/bin/shbeing linked to dash rather than bash (which the original commit indicates), then that should be adressed instead.Hongxu: Do you have any additional information related to why you made the change in the first place?
If revert this patch, we will have the issue which this patch have fixed.
There is another patch in mailing list that fix the issue you report
[OE-core] [PATCH] devshell.bbclass/terminal.bbclass: add a shell check at devshell
While var-SHELL is neither bash' or dash', such as csh', loading the wrapper script will fail at devshell, because csh does not support syntax export'.
Add a shell check at devshell, and use /bin/sh' to replace if shell is neither bash' or dash'. /bin/sh' is safe to use since `ecdfdd7 sanity.bbclass: check /bin/sh is dash or bash'
---
meta/classes/devshell.bbclass | 4 ++++
meta/classes/terminal.bbclass | 4 +++-
2 files changed, 7 insertions(+), 1 deletion(-)
meta/classes/devshell.bbclass +0 -0
@@ -3,6 +3,10 @@ inherit terminal
DEVSHELL = "${SHELL}"
python do_devshell () {
+ devshell = d.getVar('DEVSHELL')
+ devshell = devshell if devshell.endswith("bash") or devshell.endswith("dash") else '/bin/sh' + d.setVar('DEVSHELL', devshell)
+
if d.getVarFlag("do_devshell", "manualfakeroot"):
d.prependVar("DEVSHELL", "pseudo ")
fakeenv = d.getVar("FAKEROOTENV").split()
meta/classes/terminal.bbclass +0 -0
@@ -25,7 +25,9 @@ def emit_terminal_func(command, envdata, d):
bb.utils.mkdirhier(os.path.dirname(runfile))
with open(runfile, 'w') as script:
- script.write('#!/usr/bin/env %s\n' % d.getVar('SHELL'))
+ shell = d.getVar('SHELL')
+ shell = shell if shell.endswith("bash") or shell.endswith("dash") else '/bin/sh' + script.write('#!/usr/bin/env %s\n' % shell)
script.write('set -e\n')
bb.data.emit_func(cmd_func, script, envdata) script.write(cmd_func)
//Hongxu
Quoted 17 lines
meta/classes/terminal.bbclass | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)meta/classes/terminal.bbclass +1
-2@@ -25,8 +25,7 @@ def emit_terminal_func(command, envdata, d): bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: - script.write('#!/usr/bin/env %s\n' % d.getVar('SHELL')) - script.write('set -e\n') + script.write('#!/bin/sh -e\n') bb.data.emit_func(cmd_func, script, envdata) script.write(cmd_func) script.write("\n")