correct way to `echo | sudo tee`
-
Are you saying it waits forever, or you read somewhere it will wait forever and you want clarification?
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.
-
I just switched over to bash and it worked lol. It just didn't return for me in zsh...
My initial guess was that sudo would eat up the echo’d foo as the password. Maybe
sudo
works differently when invoked via zsh? -
I just switched over to bash and it worked lol. It just didn't return for me in zsh...
It works here in zsh, did you mistype the closing quote?
-
My initial guess was that sudo would eat up the echo’d foo as the password. Maybe
sudo
works differently when invoked via zsh?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. -
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.
ZSH is bash-compliant, but will not always behave like bash in all situations.
Add
sh -c
beforeecho
and see if that works -
ZSH is bash-compliant, but will not always behave like bash in all situations.
Add
sh -c
beforeecho
and see if that worksyep. that did it. I had to wrap the entire thing in quotes though
sh -c "echo 'test' | sudo tee newfile"
-
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.ROS
Fly you fools!
-
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?
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
withsponge
frommoreutils
. The difference is thatsponge
waits for the end of stdin before it starts writing which can avoid problems in some situations. -
I just switched over to bash and it worked lol. It just didn't return for me in zsh...
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?
-
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
withsponge
frommoreutils
. The difference is thatsponge
waits for the end of stdin before it starts writing which can avoid problems in some situations.Nice one, didn't know about
moreutils
. I indeed used p10k on top of zsh. Newzsh
instance without sourcing anythingzsh --no-rcs
managed to write to file without issues. Thanks -