Open file descriptor in Bash in overwrite mode
I'm opening additional file descriptors in my Bash script with
Reproducer="reproducer.sh"
exec 3<> $Reproducer
This can then be used with e.g. echo
echo "#! /bin/bash" >&3
echo "echo This is a reproducer script." >&3
Source: How do file descriptors work?
As I noticed after lots of tries, the opened file overwrites existing content in the file. If the new content is larger, it will expand the file, but if the new content has less bytes, the old content will remain at the end of the file.
This creates a broken script in my case, because I'm writing a Bash script.
Is there an option to the exec 3<> file
statement to truncate the file while opening?
Alternative solutions:
- delete the file before opening with
rm $Reproducer
.
bash file-io truncate
add a comment |
I'm opening additional file descriptors in my Bash script with
Reproducer="reproducer.sh"
exec 3<> $Reproducer
This can then be used with e.g. echo
echo "#! /bin/bash" >&3
echo "echo This is a reproducer script." >&3
Source: How do file descriptors work?
As I noticed after lots of tries, the opened file overwrites existing content in the file. If the new content is larger, it will expand the file, but if the new content has less bytes, the old content will remain at the end of the file.
This creates a broken script in my case, because I'm writing a Bash script.
Is there an option to the exec 3<> file
statement to truncate the file while opening?
Alternative solutions:
- delete the file before opening with
rm $Reproducer
.
bash file-io truncate
add a comment |
I'm opening additional file descriptors in my Bash script with
Reproducer="reproducer.sh"
exec 3<> $Reproducer
This can then be used with e.g. echo
echo "#! /bin/bash" >&3
echo "echo This is a reproducer script." >&3
Source: How do file descriptors work?
As I noticed after lots of tries, the opened file overwrites existing content in the file. If the new content is larger, it will expand the file, but if the new content has less bytes, the old content will remain at the end of the file.
This creates a broken script in my case, because I'm writing a Bash script.
Is there an option to the exec 3<> file
statement to truncate the file while opening?
Alternative solutions:
- delete the file before opening with
rm $Reproducer
.
bash file-io truncate
I'm opening additional file descriptors in my Bash script with
Reproducer="reproducer.sh"
exec 3<> $Reproducer
This can then be used with e.g. echo
echo "#! /bin/bash" >&3
echo "echo This is a reproducer script." >&3
Source: How do file descriptors work?
As I noticed after lots of tries, the opened file overwrites existing content in the file. If the new content is larger, it will expand the file, but if the new content has less bytes, the old content will remain at the end of the file.
This creates a broken script in my case, because I'm writing a Bash script.
Is there an option to the exec 3<> file
statement to truncate the file while opening?
Alternative solutions:
- delete the file before opening with
rm $Reproducer
.
bash file-io truncate
bash file-io truncate
asked Nov 25 '18 at 1:11
PaebbelsPaebbels
7,43983477
7,43983477
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
One of the things you can do is to create a temp file and replace the old with this one.
exec 3<>/tmp/script
printf "%sn" "#!/bin/bash" >&3
printf "%sn" "printf "This is a reproducer script.n"" >&3
exec 3>&-
mv /tmp/script "${Reproducer}"
You will achieve two things:
- Your new script will not have any junk left at the end;
- If the process fails before finish, you will not delete your previous script and you are still able to recover your partially created file.
add a comment |
exec 3>$Reproducer
Should work unless you need to read the file. in that case:
exec 3>$Reproducer 4<$Reproducer
and you read from file descriptor 4.
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463846%2fopen-file-descriptor-in-bash-in-overwrite-mode%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
One of the things you can do is to create a temp file and replace the old with this one.
exec 3<>/tmp/script
printf "%sn" "#!/bin/bash" >&3
printf "%sn" "printf "This is a reproducer script.n"" >&3
exec 3>&-
mv /tmp/script "${Reproducer}"
You will achieve two things:
- Your new script will not have any junk left at the end;
- If the process fails before finish, you will not delete your previous script and you are still able to recover your partially created file.
add a comment |
One of the things you can do is to create a temp file and replace the old with this one.
exec 3<>/tmp/script
printf "%sn" "#!/bin/bash" >&3
printf "%sn" "printf "This is a reproducer script.n"" >&3
exec 3>&-
mv /tmp/script "${Reproducer}"
You will achieve two things:
- Your new script will not have any junk left at the end;
- If the process fails before finish, you will not delete your previous script and you are still able to recover your partially created file.
add a comment |
One of the things you can do is to create a temp file and replace the old with this one.
exec 3<>/tmp/script
printf "%sn" "#!/bin/bash" >&3
printf "%sn" "printf "This is a reproducer script.n"" >&3
exec 3>&-
mv /tmp/script "${Reproducer}"
You will achieve two things:
- Your new script will not have any junk left at the end;
- If the process fails before finish, you will not delete your previous script and you are still able to recover your partially created file.
One of the things you can do is to create a temp file and replace the old with this one.
exec 3<>/tmp/script
printf "%sn" "#!/bin/bash" >&3
printf "%sn" "printf "This is a reproducer script.n"" >&3
exec 3>&-
mv /tmp/script "${Reproducer}"
You will achieve two things:
- Your new script will not have any junk left at the end;
- If the process fails before finish, you will not delete your previous script and you are still able to recover your partially created file.
answered Nov 25 '18 at 12:27
ingroxdingroxd
5881524
5881524
add a comment |
add a comment |
exec 3>$Reproducer
Should work unless you need to read the file. in that case:
exec 3>$Reproducer 4<$Reproducer
and you read from file descriptor 4.
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
add a comment |
exec 3>$Reproducer
Should work unless you need to read the file. in that case:
exec 3>$Reproducer 4<$Reproducer
and you read from file descriptor 4.
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
add a comment |
exec 3>$Reproducer
Should work unless you need to read the file. in that case:
exec 3>$Reproducer 4<$Reproducer
and you read from file descriptor 4.
exec 3>$Reproducer
Should work unless you need to read the file. in that case:
exec 3>$Reproducer 4<$Reproducer
and you read from file descriptor 4.
answered Nov 25 '18 at 2:15
rootroot
1
1
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
add a comment |
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
The file descriptor is used write-only.
– Paebbels
Nov 25 '18 at 2:21
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463846%2fopen-file-descriptor-in-bash-in-overwrite-mode%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown