heredoc seems to parse contents even with the quoted delimiter in shell prompt

2020-08-15 Thread Hyunho Cho
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2
-fdebug-prefix-map=/build/bash-a6qmCk/bash-5.0=.
-fstack-protector-strong -Wformat -Werror=format-security -Wall
-Wno-parentheses -Wno-format-security
uname output: Linux EliteBook 5.4.0-42-generic #46-Ubuntu SMP Fri Jul
10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu

Bash Version: 5.0
Patch Level: 17
Release Status: release




if i use "test.sh" file for running shell script like this, there are
no error messages appear


bash$ cat test.sh
#!/bin/bash

cat << "EOF"
this is a test comment
$(info $(foo ${bar)))
EOF


bash$ ./test.sh  # no error messages appear
this is a test comment
$(info $(foo ${bar)))

---

if i use the same script in shell prompt then strange error messages appear


bash$ cat << "EOF"
this is a test comment
$(info $(foo ${bar)))
EOF
bash: command substitution: line 798: unexpected EOF while looking for
matching `}'
bash: command substitution: line 799: syntax error: unexpected end of file
bash: command substitution: line 798: unexpected EOF while looking for
matching `}'
bash: command substitution: line 799: syntax error: unexpected end of file
this is a test comment
$(info $(foo ${bar)))



multi-line command history does not work when new terminal opened

2020-08-15 Thread Hyunho Cho
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2
-fdebug-prefix-map=/build/bash-a6qmCk/bash-5.0=.
-fstack-protector-strong -Wformat -Werror=format-security -Wall
-Wno-parentheses -Wno-format-security
uname output: Linux EliteBook 5.4.0-42-generic #46-Ubuntu SMP Fri Jul
10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu

Bash Version: 5.0
Patch Level: 17
Release Status: release




I have enabled the shell options for multi-line command history like this

shopt -s lithist
shopt -s cmdhist

and it works well in current terminal

bash$ history
 8651  echo history test 1
 8652  echo history test 2
 8653  echo history test 3
 8654  cat << EOF
111
222  # multi-line command history works well
333
EOF

 8655  history

---

if i opened new terminal then the multi-line commands all changed to
single lines like this

bash$ history
 7819  echo history test 1
 7820  echo history test 2
 7821  echo history test 3
 7822  cat << EOF
 7823  111  # the multi-line
commands changed to single lines
 7824  222
 7825  333
 7826  EOF
 7827  history