Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How run bash script
Forum Updated to NodeBB v4.3 + New Features

How run bash script

Scheduled Pinned Locked Moved Solved General and Desktop
11 Posts 2 Posters 663 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Mihaill
    wrote on 19 Apr 2023, 10:47 last edited by
    #1

    Hi!
    I have script :

    sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/
    

    How I can run this script? How I can run this script in QProcess?

    J 1 Reply Last reply 19 Apr 2023, 11:13
    0
    • M Mihaill
      19 Apr 2023, 10:47

      Hi!
      I have script :

      sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/
      

      How I can run this script? How I can run this script in QProcess?

      J Online
      J Online
      JonB
      wrote on 19 Apr 2023, 11:13 last edited by JonB
      #2

      @Mihaill
      If you want to stick with using <<< you would have to run your command via bash -c "sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/".

      If you don't want to invoke bash -c you would have to invoke sudo -S and then send the string 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ via QProcess::write() so that it arrives at the sub-process's stdin.

      To make it work as-is

      QProcess p;
      p.start("/bin/bash", { "-c", "sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/" } );
      

      Untested, but the second way might work with

      p.start("sudo", { "-S" });
      p.write("1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/");  # string might need a terminating `\n`, I don't know
      

      On a separate note, for my own interest. This whole use of sudo with a Here-document (the <<<) looks "odd" to me. In principle

      command <<< some text
      

      ought to be the same as

      echo "some text" | command
      

      But, for unknown/undocumented reason it is not for the sudo. sudo -S "password echo hello" works, but echo "password echo hello" | sudo -S gives a sudo "usage" error message. That implies to me that sudo behaves differently depending on whether stdin is or is not attached to a terminal....

      UPDATE
      I misunderstood how <<< works. Turns out, it only reads the next token, not the rest of the line, to present as stdin. So

      command <<< some text
      

      actually equates to echo some | command text. One would need command <<< "some text" to equate to echo "some text" | command.

      As a result of this, my second "untested" proposal above would need to be changed to:

      p.start("sudo", { "-S", "./live555ProxyServer", "-v", "rtsp://stream.com:554/Rz.32.02/" });
      p.write("1qaz");  # string might need a terminating `\n`, I don't know
      
      M 1 Reply Last reply 19 Apr 2023, 11:39
      0
      • J JonB
        19 Apr 2023, 11:13

        @Mihaill
        If you want to stick with using <<< you would have to run your command via bash -c "sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/".

        If you don't want to invoke bash -c you would have to invoke sudo -S and then send the string 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ via QProcess::write() so that it arrives at the sub-process's stdin.

        To make it work as-is

        QProcess p;
        p.start("/bin/bash", { "-c", "sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/" } );
        

        Untested, but the second way might work with

        p.start("sudo", { "-S" });
        p.write("1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/");  # string might need a terminating `\n`, I don't know
        

        On a separate note, for my own interest. This whole use of sudo with a Here-document (the <<<) looks "odd" to me. In principle

        command <<< some text
        

        ought to be the same as

        echo "some text" | command
        

        But, for unknown/undocumented reason it is not for the sudo. sudo -S "password echo hello" works, but echo "password echo hello" | sudo -S gives a sudo "usage" error message. That implies to me that sudo behaves differently depending on whether stdin is or is not attached to a terminal....

        UPDATE
        I misunderstood how <<< works. Turns out, it only reads the next token, not the rest of the line, to present as stdin. So

        command <<< some text
        

        actually equates to echo some | command text. One would need command <<< "some text" to equate to echo "some text" | command.

        As a result of this, my second "untested" proposal above would need to be changed to:

        p.start("sudo", { "-S", "./live555ProxyServer", "-v", "rtsp://stream.com:554/Rz.32.02/" });
        p.write("1qaz");  # string might need a terminating `\n`, I don't know
        
        M Offline
        M Offline
        Mihaill
        wrote on 19 Apr 2023, 11:39 last edited by Mihaill
        #3

        @JonB said in How run bash script:

        p.start("/bin/bash", { "-c", "sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/" } );
        p.start("sudo", { "-S" });
        p.write("1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/"); #

        I try use this, but when I try get output from console -> I get ""

        p.readAll()  == "";
        

        But errorString() == "Unknown error";
        How I can get output from console?

        J 1 Reply Last reply 19 Apr 2023, 11:41
        0
        • M Mihaill
          19 Apr 2023, 11:39

          @JonB said in How run bash script:

          p.start("/bin/bash", { "-c", "sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/" } );
          p.start("sudo", { "-S" });
          p.write("1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/"); #

          I try use this, but when I try get output from console -> I get ""

          p.readAll()  == "";
          

          But errorString() == "Unknown error";
          How I can get output from console?

          J Online
          J Online
          JonB
          wrote on 19 Apr 2023, 11:41 last edited by
          #4

          @Mihaill
          Now you need to look up how QProcess works. Your readAll() call is too early, the QProcess::start() has only just started the process.

          The simplest for your case, if it suffices, is:

          p.start("sudo", { "-S" });
          p.write("1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/");  # string might need a terminating `\n`, I don't know
          p.waitForFinished();
          qDebug() << p.readAll();
          
          M 1 Reply Last reply 19 Apr 2023, 11:52
          1
          • J JonB
            19 Apr 2023, 11:41

            @Mihaill
            Now you need to look up how QProcess works. Your readAll() call is too early, the QProcess::start() has only just started the process.

            The simplest for your case, if it suffices, is:

            p.start("sudo", { "-S" });
            p.write("1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/");  # string might need a terminating `\n`, I don't know
            p.waitForFinished();
            qDebug() << p.readAll();
            
            M Offline
            M Offline
            Mihaill
            wrote on 19 Apr 2023, 11:52 last edited by
            #5

            @JonB I readAll() after 5 sec at start. I think that QProcess not work.

            J 1 Reply Last reply 19 Apr 2023, 12:01
            0
            • M Mihaill
              19 Apr 2023, 11:52

              @JonB I readAll() after 5 sec at start. I think that QProcess not work.

              J Online
              J Online
              JonB
              wrote on 19 Apr 2023, 12:01 last edited by JonB
              #6

              @Mihaill
              QProcess works fine.

              Why don't you try p.start("ls") or p.start("bash", { "-c", "ls" }) to see how that goes?

              Whether (a) your command line, (b) your sudo -S and (c) your ./live555ProxyServer command all behave as desired is a different matter.

              If you run sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ on the command line, does it exit (i.e. immediately return to the shell prompt) or stay running (no return to shell prompt)?

              M 2 Replies Last reply 19 Apr 2023, 12:12
              0
              • J JonB
                19 Apr 2023, 12:01

                @Mihaill
                QProcess works fine.

                Why don't you try p.start("ls") or p.start("bash", { "-c", "ls" }) to see how that goes?

                Whether (a) your command line, (b) your sudo -S and (c) your ./live555ProxyServer command all behave as desired is a different matter.

                If you run sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ on the command line, does it exit (i.e. immediately return to the shell prompt) or stay running (no return to shell prompt)?

                M Offline
                M Offline
                Mihaill
                wrote on 19 Apr 2023, 12:12 last edited by
                #7
                This post is deleted!
                1 Reply Last reply
                0
                • J JonB
                  19 Apr 2023, 12:01

                  @Mihaill
                  QProcess works fine.

                  Why don't you try p.start("ls") or p.start("bash", { "-c", "ls" }) to see how that goes?

                  Whether (a) your command line, (b) your sudo -S and (c) your ./live555ProxyServer command all behave as desired is a different matter.

                  If you run sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ on the command line, does it exit (i.e. immediately return to the shell prompt) or stay running (no return to shell prompt)?

                  M Offline
                  M Offline
                  Mihaill
                  wrote on 19 Apr 2023, 12:26 last edited by Mihaill
                  #8

                  @JonB I used m_proxyServerProcess.waitForFinished();
                  This code return normal result:

                      m_proxyServerProcess.start("/bin/bash", {"-c","echo 'some text' "});
                      m_proxyServerProcess.start("ls");
                      m_proxyServerProcess.start("/bin/bash", { "-c", "ls" });
                  

                  But it's return "" after 5 sec, but process not finished

                  m_proxyServerProcess.start("/bin/bash", {"-c",
                              "sudo -S <<< 1qaz /home/osm/Downloads/live/proxyServer/live555ProxyServer -v rtsp://stream.lesohranitel.ru:554/RU.32.02/ "});
                  
                  J 1 Reply Last reply 19 Apr 2023, 12:30
                  0
                  • M Mihaill
                    19 Apr 2023, 12:26

                    @JonB I used m_proxyServerProcess.waitForFinished();
                    This code return normal result:

                        m_proxyServerProcess.start("/bin/bash", {"-c","echo 'some text' "});
                        m_proxyServerProcess.start("ls");
                        m_proxyServerProcess.start("/bin/bash", { "-c", "ls" });
                    

                    But it's return "" after 5 sec, but process not finished

                    m_proxyServerProcess.start("/bin/bash", {"-c",
                                "sudo -S <<< 1qaz /home/osm/Downloads/live/proxyServer/live555ProxyServer -v rtsp://stream.lesohranitel.ru:554/RU.32.02/ "});
                    
                    J Online
                    J Online
                    JonB
                    wrote on 19 Apr 2023, 12:30 last edited by JonB
                    #9

                    @Mihaill
                    If you want help answer questions asked. It's really not too hard. I last wrote:

                    If you run sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ on the command line, does it exit (i.e. immediately return to the shell prompt) or stay running (no return to shell prompt)?

                    I asked that question because it is 100% vital to your question/behaviour/code. You know how your live555ProxyServer command behaves, how can I possibly know? Your ignoring it does not help either of us.

                    M 1 Reply Last reply 19 Apr 2023, 13:34
                    0
                    • J JonB
                      19 Apr 2023, 12:30

                      @Mihaill
                      If you want help answer questions asked. It's really not too hard. I last wrote:

                      If you run sudo -S <<< 1qaz ./live555ProxyServer -v rtsp://stream.com:554/Rz.32.02/ on the command line, does it exit (i.e. immediately return to the shell prompt) or stay running (no return to shell prompt)?

                      I asked that question because it is 100% vital to your question/behaviour/code. You know how your live555ProxyServer command behaves, how can I possibly know? Your ignoring it does not help either of us.

                      M Offline
                      M Offline
                      Mihaill
                      wrote on 19 Apr 2023, 13:34 last edited by
                      #10

                      @JonB In command line it's running.
                      I check this code and code works, but readAll() == "". It's strange.
                      Thanks for help.

                      J 1 Reply Last reply 19 Apr 2023, 13:39
                      0
                      • M Mihaill has marked this topic as solved on 19 Apr 2023, 13:35
                      • M Mihaill
                        19 Apr 2023, 13:34

                        @JonB In command line it's running.
                        I check this code and code works, but readAll() == "". It's strange.
                        Thanks for help.

                        J Online
                        J Online
                        JonB
                        wrote on 19 Apr 2023, 13:39 last edited by
                        #11

                        @Mihaill said in How run bash script:

                        @JonB In command line it's running.

                        I don't known what that means.

                        Do you mean that after typing sudo -S <<< 1qaz /home/osm/Downloads/live/proxyServer/live555ProxyServer -v rtsp://stream.lesohranitel.ru:554/RU.32.02/ in a terminal the command prompt does not appear again and live555ProxyServer keeps running? I would like to help you but it's so difficult to get the answers out from you! :)

                        1 Reply Last reply
                        0

                        1/11

                        19 Apr 2023, 10:47

                        • Login

                        • Login or register to search.
                        1 out of 11
                        • First post
                          1/11
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved