Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

agnos.is Forums

  1. Home
  2. Linux
  3. correct way to `echo | sudo tee`

correct way to `echo | sudo tee`

Scheduled Pinned Locked Moved Linux
17 Posts 9 Posters 0 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.
  • agility0971@lemmy.worldA [email protected]

    Can someone explain why this would make the command wait forever? What is tee waiting for?

    echo "test" | sudo tee newfile
    

    What would be a scriptable workaround for such cases?

    negativelookbehind@lemmy.worldN This user is from outside of this forum
    negativelookbehind@lemmy.worldN This user is from outside of this forum
    [email protected]
    wrote on last edited by
    #5

    Maybe it's silently prompting you for your password?

    1 Reply Last reply
    0
    • B [email protected]

      Why does newfile need sudo to be created?

      You need it to be owned by root?

      agility0971@lemmy.worldA This user is from outside of this forum
      agility0971@lemmy.worldA This user is from outside of this forum
      [email protected]
      wrote on last edited by
      #6

      yeah indeed.
      I'm setting up a container with these instructions for ROS2.
      There you'll have to add a repository to the apt sources list.

      E 1 Reply Last reply
      0
      • bleistift2@sopuli.xyzB [email protected]

        Can’t reproduce.

        16:22:48:~/tmp$ echo foo | sudo tee newfile
        [sudo] Passwort für bleistift2:         
        foo
        
        16:23:02:~/tmp$ ls -l newfile
        -rw-r--r-- 1 root root 4 Feb 23 16:22 newfile
        
        agility0971@lemmy.worldA This user is from outside of this forum
        agility0971@lemmy.worldA This user is from outside of this forum
        [email protected]
        wrote on last edited by
        #7

        I just switched over to bash and it worked lol. It just didn't return for me in zsh...

        bleistift2@sopuli.xyzB mynameisrichard@lemmy.mlM 2xsaiko@discuss.tchncs.de2 3 Replies Last reply
        0
        • J [email protected]

          Are you saying it waits forever, or you read somewhere it will wait forever and you want clarification?

          agility0971@lemmy.worldA This user is from outside of this forum
          agility0971@lemmy.worldA This user is from outside of this forum
          [email protected]
          wrote on last edited by
          #8

          what I was saying was that echo "text" | sudo tee newfile would hang and never return and needs to be interrupted. I just noticed this does not happen in bash but I was testing in zsh.

          Guessing that file doesn't exist already is the problem, and you don't even need to use tee in this example.

          you've missed the point here I'm afraid. But I'll blame it on my for not explaining properly what I was intending to do.

          J 1 Reply Last reply
          0
          • agility0971@lemmy.worldA [email protected]

            I just switched over to bash and it worked lol. It just didn't return for me in zsh...

            bleistift2@sopuli.xyzB This user is from outside of this forum
            bleistift2@sopuli.xyzB This user is from outside of this forum
            [email protected]
            wrote on last edited by
            #9

            My initial guess was that sudo would eat up the echo’d foo as the password. Maybe sudo works differently when invoked via zsh?

            agility0971@lemmy.worldA 1 Reply Last reply
            0
            • agility0971@lemmy.worldA [email protected]

              I just switched over to bash and it worked lol. It just didn't return for me in zsh...

              mynameisrichard@lemmy.mlM This user is from outside of this forum
              mynameisrichard@lemmy.mlM This user is from outside of this forum
              [email protected]
              wrote on last edited by
              #10

              It works here in zsh, did you mistype the closing quote?

              1 Reply Last reply
              0
              • bleistift2@sopuli.xyzB [email protected]

                My initial guess was that sudo would eat up the echo’d foo as the password. Maybe sudo works differently when invoked via zsh?

                agility0971@lemmy.worldA This user is from outside of this forum
                agility0971@lemmy.worldA This user is from outside of this forum
                [email protected]
                wrote on last edited by
                #11

                sudo does not prompt for password in my container. It just elevates the privileges straight away. Yeah, it's hard to tell. Or test for that matter.

                1 Reply Last reply
                0
                • agility0971@lemmy.worldA [email protected]

                  what I was saying was that echo "text" | sudo tee newfile would hang and never return and needs to be interrupted. I just noticed this does not happen in bash but I was testing in zsh.

                  Guessing that file doesn't exist already is the problem, and you don't even need to use tee in this example.

                  you've missed the point here I'm afraid. But I'll blame it on my for not explaining properly what I was intending to do.

                  J This user is from outside of this forum
                  J This user is from outside of this forum
                  [email protected]
                  wrote on last edited by
                  #12

                  ZSH is bash-compliant, but will not always behave like bash in all situations.

                  Add sh -c before echo and see if that works

                  agility0971@lemmy.worldA 1 Reply Last reply
                  0
                  • J [email protected]

                    ZSH is bash-compliant, but will not always behave like bash in all situations.

                    Add sh -c before echo and see if that works

                    agility0971@lemmy.worldA This user is from outside of this forum
                    agility0971@lemmy.worldA This user is from outside of this forum
                    [email protected]
                    wrote on last edited by
                    #13

                    yep. that did it. I had to wrap the entire thing in quotes though

                    sh -c "echo 'test' | sudo tee newfile"
                    
                    1 Reply Last reply
                    0
                    • agility0971@lemmy.worldA [email protected]

                      yeah indeed.
                      I'm setting up a container with these instructions for ROS2.
                      There you'll have to add a repository to the apt sources list.

                      E This user is from outside of this forum
                      E This user is from outside of this forum
                      [email protected]
                      wrote on last edited by
                      #14

                      ROS

                      Fly you fools!

                      1 Reply Last reply
                      0
                      • agility0971@lemmy.worldA [email protected]

                        Can someone explain why this would make the command wait forever? What is tee waiting for?

                        echo "test" | sudo tee newfile
                        

                        What would be a scriptable workaround for such cases?

                        hallettj@leminal.spaceH This user is from outside of this forum
                        hallettj@leminal.spaceH This user is from outside of this forum
                        [email protected]
                        wrote on last edited by
                        #15

                        I'm gonna take a couple of stabs in the dark.

                        According to this Stack Overflow answer using tee can prevent the prompt from drawing which makes it appear that a script has not terminated. The answerer's workaround is to put a very short sleep command after the tee command.

                        If this is what happened to you maybe the reason the script works in bash but not in zsh is because you have different prompts configured in those two shells.

                        Another idea is to replace tee with sponge from moreutils. The difference is that sponge waits for the end of stdin before it starts writing which can avoid problems in some situations.

                        agility0971@lemmy.worldA 1 Reply Last reply
                        0
                        • agility0971@lemmy.worldA [email protected]

                          I just switched over to bash and it worked lol. It just didn't return for me in zsh...

                          2xsaiko@discuss.tchncs.de2 This user is from outside of this forum
                          2xsaiko@discuss.tchncs.de2 This user is from outside of this forum
                          [email protected]
                          wrote on last edited by
                          #16

                          I use zsh and it works fine for me fwiw. Same with zsh --no-rcs (which doesn't load zshrc). Maybe you have some weird setting enabled?

                          1 Reply Last reply
                          0
                          • hallettj@leminal.spaceH [email protected]

                            I'm gonna take a couple of stabs in the dark.

                            According to this Stack Overflow answer using tee can prevent the prompt from drawing which makes it appear that a script has not terminated. The answerer's workaround is to put a very short sleep command after the tee command.

                            If this is what happened to you maybe the reason the script works in bash but not in zsh is because you have different prompts configured in those two shells.

                            Another idea is to replace tee with sponge from moreutils. The difference is that sponge waits for the end of stdin before it starts writing which can avoid problems in some situations.

                            agility0971@lemmy.worldA This user is from outside of this forum
                            agility0971@lemmy.worldA This user is from outside of this forum
                            [email protected]
                            wrote on last edited by
                            #17

                            Nice one, didn't know about moreutils. I indeed used p10k on top of zsh. New zsh instance without sourcing anything zsh --no-rcs managed to write to file without issues. Thanks

                            1 Reply Last reply
                            0
                            • System shared this topic on
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups