Problem making an if statement to log whether a command succeeded or not
I have a function "startInstallation()" that does some clean up and directory creation then calls a java jar to the rest of the installation with the typical command "java -jar myapp.jar".
Basically I want to to make an if condition to tell wether the installation was successfull or not, if there were no errors outputted from the startInstallation function therefore it succeeded otherwise it failed.
So after googling a bit I've found the following should work:
if startInstallation ; then
log "installation was successful"
else
log "installation failed"
fi
This however always logs the "installation was successful" even if the java command fails. But why? I read this on this stackexchange post "How to conditionally do something if a command succeeded or failed" which had a lot of upvotes.
https://redd.it/yx834m
@r_bash
I have a function "startInstallation()" that does some clean up and directory creation then calls a java jar to the rest of the installation with the typical command "java -jar myapp.jar".
Basically I want to to make an if condition to tell wether the installation was successfull or not, if there were no errors outputted from the startInstallation function therefore it succeeded otherwise it failed.
So after googling a bit I've found the following should work:
if startInstallation ; then
log "installation was successful"
else
log "installation failed"
fi
This however always logs the "installation was successful" even if the java command fails. But why? I read this on this stackexchange post "How to conditionally do something if a command succeeded or failed" which had a lot of upvotes.
https://redd.it/yx834m
@r_bash
Unix & Linux Stack Exchange
How to conditionally do something if a command succeeded or failed
How can I do something like this in bash?
if "`command` returns any error";
then
echo "Returned an error"
else
echo "Proceed..."
fi
if "`command` returns any error";
then
echo "Returned an error"
else
echo "Proceed..."
fi
Converting field before delimiter to uppercase and how to replace with multiple newlines
Hi all,
I'm trying to make a little noscript that fetches all the links after a delimiter from a national news platform, cleans them up and outputs simple text and I am having trouble formatting the output
This is the noscript so far :
lynx -dump -listonly https://www.nu.nl/meest-gelezen | awk '/Hidden links/,EOF' | sed 's/.....$//' | cut -f4,6 -d'/' | tr '-' ' ' | sed 's/-/\\n/g' | tr "/" "\\n" | grep -v Hidden
Where:
\- the cut steps indicates the field I want to make uppercase, field 4 as indicated to cut, for example one line of the output at this point is:https://www.nu.nl/category-name/6236420/news-noscript
\- I'm using tr "/" "\\n" to replace one byte where I really want two as the output; two new lines would do
I think the noscript is a bit all over the place since it is probably quite possible to do all the operations with just perl or advanced regex but this approach is quite readable and quick enough, what do you think?
https://redd.it/yxboa3
@r_bash
Hi all,
I'm trying to make a little noscript that fetches all the links after a delimiter from a national news platform, cleans them up and outputs simple text and I am having trouble formatting the output
This is the noscript so far :
lynx -dump -listonly https://www.nu.nl/meest-gelezen | awk '/Hidden links/,EOF' | sed 's/.....$//' | cut -f4,6 -d'/' | tr '-' ' ' | sed 's/-/\\n/g' | tr "/" "\\n" | grep -v Hidden
Where:
\- the cut steps indicates the field I want to make uppercase, field 4 as indicated to cut, for example one line of the output at this point is:https://www.nu.nl/category-name/6236420/news-noscript
\- I'm using tr "/" "\\n" to replace one byte where I really want two as the output; two new lines would do
I think the noscript is a bit all over the place since it is probably quite possible to do all the operations with just perl or advanced regex but this approach is quite readable and quick enough, what do you think?
https://redd.it/yxboa3
@r_bash
NU
Meest Gelezen | NU - Het laatste nieuws het eerst op NU.nl
Nieuws en video's uit de rubriek Meest Gelezen. Betrouwbaar, gratis en snel op NU.nl, de grootste nieuwssite van Nederland.
Attempted Yes/No Directory/File Creation
I am trying to create a bash file that searches if a directory exists and, if it does not, makes it. If it does exist, it searches if the file exists and, if not, creates it. Only issue is that my bash code doesn't appear to work (due to my inexperience) and I don't know why. Help would be appreciated.
bash:
bin/bash
echo “Enter the Directory: ”
read dd
read y
if [ -d $dd \]
then
echo “$dd is valid directory and it exists. ”
if test -f “$dd”; then
echo “$dd file exists.”
else
echo “$dd file does not exist. Do you want to create it (Y/N)? ”
yes=$(echo $y | tr -s '[:upper:\]' '[:lower:\]')
if [[ "$y" = "yes" \]\] ; then
echo “File will not be created.”
else
echo “File will be created.”
touch $dd
else
echo “$directory does not exist. Do you want to create it (Y/N)? ”
yes=$(echo $y | tr -s '[:upper:\]' '[:lower:\]')
if [[ "$y" = "yes" \]\] ; then
echo “Directory will not be created.”
else
echo “Directory will be created.”
mkdir $dd
fi
​
Output:
noscript2.sh: line 1: bin/bash: No such file or directory
​
“Enter the Directory: ”
​
s
​
s
​
sript2.sh: line 12: syntax error near unexpected token `('
​
noscript2.sh: line 12: ` echo “$dd file does not exist. Do you want to create it (Y/N)? ”'
I have no clue where I messed up.
https://redd.it/yxk5ms
@r_bash
I am trying to create a bash file that searches if a directory exists and, if it does not, makes it. If it does exist, it searches if the file exists and, if not, creates it. Only issue is that my bash code doesn't appear to work (due to my inexperience) and I don't know why. Help would be appreciated.
bash:
bin/bash
echo “Enter the Directory: ”
read dd
read y
if [ -d $dd \]
then
echo “$dd is valid directory and it exists. ”
if test -f “$dd”; then
echo “$dd file exists.”
else
echo “$dd file does not exist. Do you want to create it (Y/N)? ”
yes=$(echo $y | tr -s '[:upper:\]' '[:lower:\]')
if [[ "$y" = "yes" \]\] ; then
echo “File will not be created.”
else
echo “File will be created.”
touch $dd
else
echo “$directory does not exist. Do you want to create it (Y/N)? ”
yes=$(echo $y | tr -s '[:upper:\]' '[:lower:\]')
if [[ "$y" = "yes" \]\] ; then
echo “Directory will not be created.”
else
echo “Directory will be created.”
mkdir $dd
fi
​
Output:
noscript2.sh: line 1: bin/bash: No such file or directory
​
“Enter the Directory: ”
​
s
​
s
​
sript2.sh: line 12: syntax error near unexpected token `('
​
noscript2.sh: line 12: ` echo “$dd file does not exist. Do you want to create it (Y/N)? ”'
I have no clue where I messed up.
https://redd.it/yxk5ms
@r_bash
reddit
Attempted Yes/No Directory/File Creation
I am trying to create a bash file that searches if a directory exists and, if it does not, makes it. If it does exist, it searches if the file...
Checking for newly moved files in shared folder
So I have a shared folder, in which people put pdf files, which I then need to convert.
And I wanted to automate it, so I watned to do a bash noscript that will:
1. Check if there are any new pdf files in a directory
2. If there are new pdf files, execute ananother noscript ([convertert.sh](https://convertert.sh) <locationOfPDFFile>)
3. repeat
When I was testing it on local storage, I managed to do it with **inotifywait.** The problem is, inotifywait doesn't work with shared folder.
So I tried to implemet this using **find,** like this:
while $(true); do
find /mnt/pdf/ -type f -iname "*.pdf" -cmin-1
sleep 60
done;
And it works with *created* files, but when I *move* file from somewhere else to my shared fodler, the file won't show up, since technically it is not modified.
What is the best solution for this situation?
https://redd.it/yxnvac
@r_bash
So I have a shared folder, in which people put pdf files, which I then need to convert.
And I wanted to automate it, so I watned to do a bash noscript that will:
1. Check if there are any new pdf files in a directory
2. If there are new pdf files, execute ananother noscript ([convertert.sh](https://convertert.sh) <locationOfPDFFile>)
3. repeat
When I was testing it on local storage, I managed to do it with **inotifywait.** The problem is, inotifywait doesn't work with shared folder.
So I tried to implemet this using **find,** like this:
while $(true); do
find /mnt/pdf/ -type f -iname "*.pdf" -cmin-1
sleep 60
done;
And it works with *created* files, but when I *move* file from somewhere else to my shared fodler, the file won't show up, since technically it is not modified.
What is the best solution for this situation?
https://redd.it/yxnvac
@r_bash
Multiple Variable Solutoions
How do you go about putting multiple variables as a solution/meeting the criteria for an if/then/else statement?
Example:
The previous section of it doesn't matter that much in this instance
if test -f '$dd'; then
echo '$dd file exists.'
else
read Y/N
echo '$dd file does not exist. Do you want to create it (Y/N)? $Y/N'
read Y/N
\#How I assume you would put multiple variables
if [[ "$Y/N" = no | No | NO| n \]\] ; then
echo 'File will not be created.'
else
echo 'File will be created.'
touch $dd
fi
fi
.... To be continued
Also, can you use multiple if/then/else statements in a single bash so long as you keep them in the right columns?
https://redd.it/yxp11t
@r_bash
How do you go about putting multiple variables as a solution/meeting the criteria for an if/then/else statement?
Example:
The previous section of it doesn't matter that much in this instance
if test -f '$dd'; then
echo '$dd file exists.'
else
read Y/N
echo '$dd file does not exist. Do you want to create it (Y/N)? $Y/N'
read Y/N
\#How I assume you would put multiple variables
if [[ "$Y/N" = no | No | NO| n \]\] ; then
echo 'File will not be created.'
else
echo 'File will be created.'
touch $dd
fi
fi
.... To be continued
Also, can you use multiple if/then/else statements in a single bash so long as you keep them in the right columns?
https://redd.it/yxp11t
@r_bash
reddit
Multiple Variable Solutoions
How do you go about putting multiple variables as a solution/meeting the criteria for an if/then/else statement? Example: The previous section...
Save result of echo command in a variable
This is a very basic question, but I am new to bash noscripting. In the code snippet below, I am trying to extract something from a file and save it to a variable. What I have shown in the first echo command is working correctly. Instead of echoing it, I want to save it to a variable. The stuff below that is not working, I feel like maybe I am missing brackets or have the $ in the wrong place. Thanks in advance for your help! Sorry about the bad formatting, I am posting from my phone.
#!/bin/bash
header_file="../../build.vivado/output/headers/axi_gp_header.vh"
# Extract the 3rd word (reg value) from the line that contains the word "DIAGNOSTICS":
echo $(grep "DIAGNOSTICS" $header_file) | cut -d " " -f 3
# This does not print the same thing as above:
REG_VALUE=$((grep "DIAGNOSTICS" $header_file) | cut -d " " -f 3)
echo $REG_VALUE
https://redd.it/yxtsx7
@r_bash
This is a very basic question, but I am new to bash noscripting. In the code snippet below, I am trying to extract something from a file and save it to a variable. What I have shown in the first echo command is working correctly. Instead of echoing it, I want to save it to a variable. The stuff below that is not working, I feel like maybe I am missing brackets or have the $ in the wrong place. Thanks in advance for your help! Sorry about the bad formatting, I am posting from my phone.
#!/bin/bash
header_file="../../build.vivado/output/headers/axi_gp_header.vh"
# Extract the 3rd word (reg value) from the line that contains the word "DIAGNOSTICS":
echo $(grep "DIAGNOSTICS" $header_file) | cut -d " " -f 3
# This does not print the same thing as above:
REG_VALUE=$((grep "DIAGNOSTICS" $header_file) | cut -d " " -f 3)
echo $REG_VALUE
https://redd.it/yxtsx7
@r_bash
reddit
Save result of echo command in a variable
This is a very basic question, but I am new to bash noscripting. In the code snippet below, I am trying to extract something from a file and save it...
Bash - Renaming text file names based on word count
I am new to bash and have been struggling to figure this problem out. I have been trying to figure out how to go through a directory that contains all text file, sort and rename each text file according to their word count. I am trying to rename them 1.txt 2.txt 3.txt etc. 1.txt being the file with the least amount of words.
i=1
wc -w ./test1/txt | sort -n |
for files in./test1/txt; do
mv "$files" "./test1/$i.txt"
let i++
done;
This would rename the files 1,2,3.txt etc but it wont be in order of word count.
​
Thanks!
https://redd.it/yxw1nc
@r_bash
I am new to bash and have been struggling to figure this problem out. I have been trying to figure out how to go through a directory that contains all text file, sort and rename each text file according to their word count. I am trying to rename them 1.txt 2.txt 3.txt etc. 1.txt being the file with the least amount of words.
i=1
wc -w ./test1/txt | sort -n |
for files in./test1/txt; do
mv "$files" "./test1/$i.txt"
let i++
done;
This would rename the files 1,2,3.txt etc but it wont be in order of word count.
​
Thanks!
https://redd.it/yxw1nc
@r_bash
reddit
Bash - Renaming text file names based on word count
I am new to bash and have been struggling to figure this problem out. I have been trying to figure out how to go through a directory that contains...
There seems to be a ghost in my array.
Here's the noscript:
get_names() { sudo virsh list --all | sed 1,2d | tr -s ' ' | cut -d ' ' -f 3 }
mapfile -t names < <( get_names )
printf '%s\\n' "${names[@\]}"; printf '%s\\n' "${#names[@\]}"
exit
There should be 5 elements in $names, but the noscript says there are 6. I manually the edits to virsh list output and they seem fine. I even rewrote the edits from the original noscript, posted a few days ago. I tested with a simple array, where I fed it the elements, so I know my computer can count ;-)
Any help?
https://redd.it/yxxvuu
@r_bash
Here's the noscript:
get_names() { sudo virsh list --all | sed 1,2d | tr -s ' ' | cut -d ' ' -f 3 }
mapfile -t names < <( get_names )
printf '%s\\n' "${names[@\]}"; printf '%s\\n' "${#names[@\]}"
exit
There should be 5 elements in $names, but the noscript says there are 6. I manually the edits to virsh list output and they seem fine. I even rewrote the edits from the original noscript, posted a few days ago. I tested with a simple array, where I fed it the elements, so I know my computer can count ;-)
Any help?
https://redd.it/yxxvuu
@r_bash
reddit
There seems to be a ghost in my array.
Here's the noscript: get\_names() { sudo virsh list --all | sed 1,2d | tr -s ' ' | cut -d ' ' -f 3 } mapfile -t names < <( get\_names ) printf...
Confused about desktop entry (.desktop) not making executable visible under App Launcher
Hi there,
I have:
added this line to `.bashrc` to append the directory 'Portables' to variable `$PATH`:
​
export PATH=$PATH:/home/abc-pc/Portables
​
applied this code from the terminal:
​
source ~/.bashrc
copied the executable 'xyz' (an AppImage without extension) to 'Portables' with associated `xyz.desktop` and `xyz.png` files placed into `~/.local/share/applications` and `~/.local/share/icons`, respectively.
​
Exec=xyz %f
Icon=xyz
The program runs okay from the terminal by just typing
Question: Why doesn't the program icon show under the Application Launcher? It does, however, when I type in the full path to the program directory inside
Thank you!
https://redd.it/yy2vsg
@r_bash
Hi there,
I have:
added this line to `.bashrc` to append the directory 'Portables' to variable `$PATH`:
​
export PATH=$PATH:/home/abc-pc/Portables
​
applied this code from the terminal:
​
source ~/.bashrc
copied the executable 'xyz' (an AppImage without extension) to 'Portables' with associated `xyz.desktop` and `xyz.png` files placed into `~/.local/share/applications` and `~/.local/share/icons`, respectively.
xyz.desktop contains these lines:​
Exec=xyz %f
Icon=xyz
The program runs okay from the terminal by just typing
$ xyz, not $ ./xyz, which I presume means the system recognises the directory path inserted into `.bashrc`.Question: Why doesn't the program icon show under the Application Launcher? It does, however, when I type in the full path to the program directory inside
xyz.desktop. Although I thought that appending the path to $PATH was enough for the executable to be recognised by simply Exec=xyz (no full path, no file extension).Thank you!
https://redd.it/yy2vsg
@r_bash
reddit
Confused about desktop entry (.desktop) not making executable...
Hi there, I have: * added this line to `.bashrc` to append the directory 'Portables' to variable `$PATH`: export...
Incrementing variable names?
I have a
b=1
select a$b in c d e f
do
$((b++))
done
, but that actually works? Preferably something that uses no more
(If the answer is no, this is not possible with only one
https://redd.it/yy2ryt
@r_bash
I have a
select that I would like to use for assigning values to 4 different variables, a1, a2, a3 and a4. Is there something I could use for this, likeb=1
select a$b in c d e f
do
$((b++))
done
, but that actually works? Preferably something that uses no more
selects than I already have, and not a bunch of nested ifs?(If the answer is no, this is not possible with only one
select and no nested ifs, feel free to let me know.)https://redd.it/yy2ryt
@r_bash
reddit
Incrementing variable names?
I have a `select` that I would like to use for assigning values to 4 different variables, `a1`, `a2`, `a3` and `a4`. Is there something I could...
What color scheme do you use for LS_COLORS?
Are there any specific elements of color scheming that you find particularly useful?
https://redd.it/yy7oyb
@r_bash
Are there any specific elements of color scheming that you find particularly useful?
https://redd.it/yy7oyb
@r_bash
reddit
What color scheme do you use for LS_COLORS?
Are there any specific elements of color scheming that you find particularly useful?
Noob Attempts to write a bash noscript
So, I have been attempting to write a bash noscript, but I don't entirely know what I am doing. I have tried to test out what others have suggested I use/change, but everything in my vm seems to not to see them. I don't know if it changes anything, but the bash noscript is running in vi on a ubuntu console. Anyway, to the actual noscript.
"#"!/bin/bash -x
echo 'Enter the Directory: '
read dd
#This section serves to test if the input is a directory. Following the test, it will resound with a yes or a no.
if -d $dd
then
#If yes, then it will then check if it has a file with the above name. If it does not, it will ask if the person wants it to be created.
echo '$dd is valid directory and it. exists. '
if test -f '$dd'; then
echo '$dd file exists.'
else
read YN
echo '$dd file does not exist. Do you want to create it Y/N? $YN'
#This line below confuses me, but that is because I don't know what is going on.
if [ "$YN" =~ ^(no|No|NO|n|N)$ ] ; then
echo 'File will not be created.'
else
echo 'File will be created.'
touch $dd
fi
fi
else
#It is then suppose to do the same as above, but with a directory instead.
echo '$directory does not exist. Do you want to create it Y/N? $YN'
if [ "$YN" =~ ^(no|No|NO|n|N)$ ] ; then
echo 'Directory will not be created.'
else
echo 'Directory will be created.'
mkdir $dd
fi
fi
The output I am currently getting:
Enter the Directory:
s
$directory does not exist. Do you want to create it Y/N? $YN
Directory will be created.
I don't know what is going wrong. I have tried running it in shellcheck, but the most insight I have gained is "read without -r will mangle backslashes" & "Expressions don't expand in single quotes, use double quotes for that." What am I doing wrong.
https://redd.it/yyeyhc
@r_bash
So, I have been attempting to write a bash noscript, but I don't entirely know what I am doing. I have tried to test out what others have suggested I use/change, but everything in my vm seems to not to see them. I don't know if it changes anything, but the bash noscript is running in vi on a ubuntu console. Anyway, to the actual noscript.
"#"!/bin/bash -x
echo 'Enter the Directory: '
read dd
#This section serves to test if the input is a directory. Following the test, it will resound with a yes or a no.
if -d $dd
then
#If yes, then it will then check if it has a file with the above name. If it does not, it will ask if the person wants it to be created.
echo '$dd is valid directory and it. exists. '
if test -f '$dd'; then
echo '$dd file exists.'
else
read YN
echo '$dd file does not exist. Do you want to create it Y/N? $YN'
#This line below confuses me, but that is because I don't know what is going on.
if [ "$YN" =~ ^(no|No|NO|n|N)$ ] ; then
echo 'File will not be created.'
else
echo 'File will be created.'
touch $dd
fi
fi
else
#It is then suppose to do the same as above, but with a directory instead.
echo '$directory does not exist. Do you want to create it Y/N? $YN'
if [ "$YN" =~ ^(no|No|NO|n|N)$ ] ; then
echo 'Directory will not be created.'
else
echo 'Directory will be created.'
mkdir $dd
fi
fi
The output I am currently getting:
Enter the Directory:
s
$directory does not exist. Do you want to create it Y/N? $YN
Directory will be created.
I don't know what is going wrong. I have tried running it in shellcheck, but the most insight I have gained is "read without -r will mangle backslashes" & "Expressions don't expand in single quotes, use double quotes for that." What am I doing wrong.
https://redd.it/yyeyhc
@r_bash
reddit
Noob Attempts to write a bash noscript
So, I have been attempting to write a bash noscript, but I don't entirely know what I am doing. I have tried to test out what others have suggested...
Get the previous command output buffer
I'm working on a helper noscript that needs to run after every command to analyze its exit status and output logs.
I understand that stdout/stderr buffers are not stored on pseudo terminals. I therefore looked for a way to "save" this output to a temporary file before every command then read it after.
Here's what I added to my
Except when i load a new terminal and enter a command (say
Is what I'm trying to achieve possible? And if so what am I missing here?
Cheers!
https://redd.it/yyjhxo
@r_bash
I'm working on a helper noscript that needs to run after every command to analyze its exit status and output logs.
I understand that stdout/stderr buffers are not stored on pseudo terminals. I therefore looked for a way to "save" this output to a temporary file before every command then read it after.
Here's what I added to my
.bashrc:LAST_OUTPUT_LOG_FILE="~/zero.log"
exec 3>&1 1> >(tee $LAST_OUTPUT_LOG_FILE >&3)
# based on https://superuser.com/a/1111512/1748711
echo "Using $LAST_OUTPUT_LOG_FILE"
precmd () {
LAST_STATUS=$?
LAST_COMMAND=$(fc -ln -1)
echo "Last command: $LAST_COMMAND exited with status $LAST_STATUS"
echo "--------------- LAST COMMAND LOG $LAST_OUTPUT_LOG_FILE ---------------"
cat $LAST_OUTPUT_LOG_FILE
echo "--------------- LAST COMMAND LOG $LAST_OUTPUT_LOG_FILE ---------------"
# run my noscript here with the last command, its status and its output
# reset the log file
echo "" > $LAST_OUTPUT_LOG_FILE
}
export PROMPT_COMMAND=precmd
Except when i load a new terminal and enter a command (say
ls) I get the following error:precmd:echo:3: write error: broken pipe
precmd:3: write error: broken pipe
precmd:echo:4: write error: broken pipe
precmd:4: write error: broken pipe
cat: ~/zero.log: No such file or directory
precmd:echo:6: write error: broken pipe
precmd:6: write error: broken pipe
precmd:10: no such file or directory: ~/zero.log
Is what I'm trying to achieve possible? And if so what am I missing here?
Cheers!
https://redd.it/yyjhxo
@r_bash
reddit
Get the previous command output buffer
I'm working on a helper noscript that needs to run after every command to analyze its exit status and output logs. I understand that stdout/stderr...
If no STDIN read from File
I want a noscript which either writes STDIN to a file or if no STDIN present it reads from that file.
How could I do this? If I use cat to read STDIN, but there is no input it hangs.
Thanks
https://redd.it/yysmhu
@r_bash
I want a noscript which either writes STDIN to a file or if no STDIN present it reads from that file.
How could I do this? If I use cat to read STDIN, but there is no input it hangs.
Thanks
https://redd.it/yysmhu
@r_bash
reddit
If no STDIN read from File
I want a noscript which either writes STDIN to a file or if no STDIN present it reads from that file. How could I do this? If I use cat to read...
How to do a one liner for a CLI login which asks for a access token after login command?
I'm using beta version of a CLI as a tester which keeps asking for logging in with a access token each week when I use it. In bash terminal after I run
Thanks for helping
https://redd.it/yzb4kq
@r_bash
I'm using beta version of a CLI as a tester which keeps asking for logging in with a access token each week when I use it. In bash terminal after I run
noah login it prompts like this Enter access token > . How can I do this in a one liner like noah login > access_token? Thanks for helping
https://redd.it/yzb4kq
@r_bash
reddit
How to do a one liner for a CLI login which asks for a access...
I'm using beta version of a CLI as a tester which keeps asking for logging in with a access token each week when I use it. In bash terminal after...
questions about echo appending
Hello, so my problem with "echo >>" that I do not understand:
I have two files input.txt and output.txt when I loop through the lines of the first file and use "echo >>" to move them to the outputfile I have a blank first line. I understand that echo appends but then I have to question how to get rid of that? Is there no other way than deleting the first line (which seems unnecssary)?
Also if someone could explain why that behaviour is necessary instead of >> just appending beginning in the first line, that would be interesting as well.
Edit: So what my problem was, is that I did not realize that echo with no arguments does echo a blank line, so when I used it to delete the contents of a file I unwillingly inserted a blank line into it. Seems like just "> filename" is a better way to delete the contents of a file
https://redd.it/yzd9dn
@r_bash
Hello, so my problem with "echo >>" that I do not understand:
I have two files input.txt and output.txt when I loop through the lines of the first file and use "echo >>" to move them to the outputfile I have a blank first line. I understand that echo appends but then I have to question how to get rid of that? Is there no other way than deleting the first line (which seems unnecssary)?
Also if someone could explain why that behaviour is necessary instead of >> just appending beginning in the first line, that would be interesting as well.
Edit: So what my problem was, is that I did not realize that echo with no arguments does echo a blank line, so when I used it to delete the contents of a file I unwillingly inserted a blank line into it. Seems like just "> filename" is a better way to delete the contents of a file
https://redd.it/yzd9dn
@r_bash
reddit
questions about echo appending
Hello, so my problem with "echo >>" that I do not understand: I have two files input.txt and output.txt when I loop through the lines of the...
If eval find...
I have archives of archives, at least. I would like a noscript to recursively verify all archives and sub-archives for integrity. What I have works, but I know it's dumb.
Rather than making recursion with a function that calls itself (too confusing, IDK), I've decided to just manually run
declare home="${PWD}"
find . -iname '.zip' -exec sh -c '! [[ -f "${0}.val" ]] && unzip -o -d "${0%.}" "$0" && echo "$0">>$0.val' '{}' \;
find . -iname '.zip' -exec sh -c '! [[ -f "${0}.val" ]] && echo "[ERR] $0"' '{}' \;
#----------
if (
find . -iname '.zip' -exec sh -c '! [ -f "${0}.val" ] && echo "ERR $0">>"${home}log.txt"' '{}' \;
); then
echo " GOOD "
else
echo " FAIL "
fi
So, it finds zip files, and if it doesn't find "zipfile.zip.val", it extracts the contents and creates a dummy file (.val) to denote successful extraction. Then, this second part searches to make sure every .zip has an accompanying dummy file (.val).
The bottom section also just checks for the .val dummy files but instead of echo output, it just logs them and echos whether there were archives with missing .val files or not.
So, it just needs to recursively examine an archive of archives to ensure zip integrity. This is as close as I've gotten. Thanks.
OOPS: I've read that eval may be suggested over my "if (find)" sub shell method. If nothing else, maybe we can answer that!
https://redd.it/yzeqx4
@r_bash
I have archives of archives, at least. I would like a noscript to recursively verify all archives and sub-archives for integrity. What I have works, but I know it's dumb.
Rather than making recursion with a function that calls itself (too confusing, IDK), I've decided to just manually run
find a few times. Ugh. It's still far from what I want.declare home="${PWD}"
find . -iname '.zip' -exec sh -c '! [[ -f "${0}.val" ]] && unzip -o -d "${0%.}" "$0" && echo "$0">>$0.val' '{}' \;
find . -iname '.zip' -exec sh -c '! [[ -f "${0}.val" ]] && echo "[ERR] $0"' '{}' \;
#----------
if (
find . -iname '.zip' -exec sh -c '! [ -f "${0}.val" ] && echo "ERR $0">>"${home}log.txt"' '{}' \;
); then
echo " GOOD "
else
echo " FAIL "
fi
So, it finds zip files, and if it doesn't find "zipfile.zip.val", it extracts the contents and creates a dummy file (.val) to denote successful extraction. Then, this second part searches to make sure every .zip has an accompanying dummy file (.val).
The bottom section also just checks for the .val dummy files but instead of echo output, it just logs them and echos whether there were archives with missing .val files or not.
So, it just needs to recursively examine an archive of archives to ensure zip integrity. This is as close as I've gotten. Thanks.
OOPS: I've read that eval may be suggested over my "if (find)" sub shell method. If nothing else, maybe we can answer that!
https://redd.it/yzeqx4
@r_bash
reddit
If eval find...
I have archives of archives, at least. I would like a noscript to recursively verify all archives and sub-archives for integrity. What I have works,...
longest||coolest Linux pipes you have written
Hello there,it's Saturday and I'm trying to cill reading about awsome pipes. Have you any cool pipe to show off?
https://redd.it/yzfh5k
@r_bash
Hello there,it's Saturday and I'm trying to cill reading about awsome pipes. Have you any cool pipe to show off?
https://redd.it/yzfh5k
@r_bash
reddit
longest||coolest Linux pipes you have written
Hello there,it's Saturday and I'm trying to cill reading about awsome pipes. Have you any cool pipe to show off?