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
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
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.
Why does newfile need sudo to be created?
You need it to be owned by root?
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.
Are you saying it waits forever, or you read somewhere it will wait forever and you want clarification?
Guessing that file doesn't exist already is the problem, and you don't even need to use tee in this example.
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 before echo and see if that works
all 17 comments