• [object Object]@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    21
    ·
    3 days ago

    I have a script named d in my PATH and it contains this:

    ("$@" > /dev/null 2>&1 &)
    

    It allows me to run any program in a fully detached state in a way that works even if the terminal that started the program closes, and it’s as simple as d <command>.

      • [object Object]@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        2
        ·
        2 days ago

        IIRC disown is a shell built-in command, so its use is a bit limited. Not sure if & is also a built-in, but I found disown to not work in some situations. Besides, it’s shorter.

        • stewie410@programming.dev
          link
          fedilink
          arrow-up
          1
          ·
          2 days ago

          shell built-in command

          After looking into it a bit more, its at least a builtin for bash but is otherwise not POSIX. I guess nohup ... & would be the POSIX compliant equivalent, though still not a builtin.

          Its my understanding that & backgrounds, not necessarily detaches, a process – if the parent process closes, I think the background tasks would still be wait()ed on, if only using &.

      • [object Object]@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        3
        ·
        2 days ago

        () creates a subshell, and & runs the command in background. The $@ means everything after the first argument, so the <command> is executed like a normal command. I am not sure why this works, but it has worked more consistently than nohup, disown, and it’s a lot shorter than most other solutions.