skip to Main Content

I am running the following command:

OLDIFS=$IFS
IFS=$'n'
for i in $(find $HOME/test -maxdepth 1 -type f); do
    if [ $? -eq 0 ]; then
        telegram-upload --to 12345 --directories recursive --large-files split --caption '{file_name}' $i &&
            rm $i
    fi
done
IFS=$OLDIFS

If the telegram upload command exits with a non zero code I intend to do the following:

rm somefile && wget someurl && rerun the whole command

How do I go about doing something like this?

2

Answers


  1. It’s straightforward: Do an endless loop, which you break out once you succeed:

    for i in $(find $HOME/test -maxdepth 1 -type f)
    do
      while true
      do
        if telegram-upload --to 12345 --directories recursive --large-files split --caption '{file_name}' $i
        then
          break
        else
          rm somefile && wget someurl
        fi
      done
    done
    

    UPDATE : For completeness, I added the loop over the files as well. Note that your approach of looping over the files will fail, if you have files where the name contains white space. However this is already a problem in your own approach and not part of the question, so I don’t discuss this here.

    Login or Signup to reply.
  2. I believe you can capture the exit code as follows:

    exit_code=$(telegram-upload --to 12345 ...)
    

    From here, you can use the variable $exit_code as a regular variable,
    like if [ $exit_code -eq 0 ]; then).

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search