Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

osh: 'trap' requires a code string #1881

Closed
oguz-ismail opened this issue Mar 25, 2024 · 7 comments
Closed

osh: 'trap' requires a code string #1881

oguz-ismail opened this issue Mar 25, 2024 · 7 comments

Comments

@oguz-ismail
Copy link

See:

$ for sh in bash bash-3.2.57 bosh 'busybox sh' dash gwsh ksh mksh oksh osh pdksh yash zsh; do
>   printf '%s: ' "$sh"
>   $sh -c 'trap : INT; trap'
> done
bash: trap -- ':' SIGINT
bash-3.2.57: trap -- ':' SIGINT
bosh: trap -- ':' INT
busybox sh: trap -- ':' INT
dash: trap -- ':' INT
gwsh: trap -- : INT
ksh: trap -- : INT
mksh: trap -- : INT
oksh: trap -- : INT
osh:   trap : INT; trap
              ^~~~
[ -c flag ]:1: 'trap' requires a code string
pdksh: trap -- : INT
yash: trap -- ':' INT
zsh: trap -- : INT

It'd be nice to have this basic feature in OSH (assuming it is actively developed).

@jasom
Copy link
Contributor

jasom commented Aug 22, 2024

I ran into this in some real-world code of mine; I have an "atexit" library I use, and as a sanity check, it greps for EXIT in the output of trap; this is not perfect, in that it can have false-positives, but I like that better than stomping on another EXIT handler.

@andychu
Copy link
Contributor

andychu commented Sep 5, 2024

(sorry for delayed response)

I am not sure how those 2 things are related?

Are you getting the error 'trap' requires a code string?

I think we should fix it anyway, but this could be a separate issue

@jasom
Copy link
Contributor

jasom commented Sep 5, 2024

Yes, I'm getting the error 'trap' requires a code string when running trap with no arguments in osh.

@oguz-ismail
Copy link
Author

I think we should fix it anyway

While you're at it fix this too

$ cat bug.sh
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
###################################################################################################
cc -xc - <<EOF
#include <unistd.h>
int main(void) {
    lseek(100, 15, SEEK_CUR);
}
EOF
./a.out
if false; then
        echo surprise!
        exit
fi
$
$ osh bug.sh
surprise!
$

@andychu
Copy link
Contributor

andychu commented Sep 5, 2024

  • That doesn't relate to trap, so it should be a separate bug -- Bug with lseek() and descriptor 100 #2068
  • "Fix this too" is not how open source works -- you can fix it. You can also fork the whole project, or not use it at all
  • If you want attention on this bug, then add some details about where you encountered it, or if it's a synthetic test case
    • that helps prioritize it among other work
    • synthetic test cases may still be fixed, depending on whether we think it leads to other bugs
    • I guess it's due to our use of descriptors above 100 for save/restore -- I think other shells may have similar variants of this issue, though I'm not sure. Again, the bug needs context to be prioritized -- please respond on Bug with lseek() and descriptor 100 #2068 and not here

@oguz-ismail
Copy link
Author

I think other shells may have similar variants of this issue,

Other shells close internal file descriptors before execing a command.

"Fix this too" is not how open source works

Don't care, I only responded because I received a notification. I don't test osh anymore

andychu pushed a commit that referenced this issue Sep 18, 2024
Trap without args

This may require re-printing the AST.  Or maybe we can just save the
entire code string too.

We may be able to attach the source.ArgvWord to the trap dict?

Unrelated: comment about memset.
@andychu
Copy link
Contributor

andychu commented Dec 19, 2024

closed in favor of #2198

@andychu andychu closed this as completed Dec 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants