Home > front end >  Using diff in a dedicated function causes the calling script to hang on first file comparison
Using diff in a dedicated function causes the calling script to hang on first file comparison

Time:03-03

For some reason after running the main script:

sudo bash main.sh

-> execution stops at the first diff redirected to file.

However, when I comment out the function name and parentheses and call the patching.sh directly - it works.

What is wrong with my script that when calling it in a form of a function from another file - it stops, but when called directly it works?

main.sh:

set -e
source $(dirname $0)/Scripts/patching.sh
# Overwrite files 
update_files

patching.sh:

#!/bin/bash

function update_files() {

    declare -r SW_DIR='Source/packages/'

    CMP_FILE='file1.c'
    diff -u ./$SW_DIR/examples/$CMP_FILE ./Source/$CMP_FILE > file.diff
    cp -v ./Source/$CMP_FILE ./$SW_DIR/examples/$CMP_FILE

}

During my debugging - I added the -x option to set. This is what I see now:

  declare -r SW_DIR=Source/packages
  CMP_FILE=file1.c
  diff -u ./Source/packages/examples/file1.c ./Source/file1.c

And that's the last line. If I omit the redirection operator - the diff is simply shown in the console and that's it. It does not proceed further, with no error message.

CodePudding user response:

See What does set -e mean in a bash script? and BashFAQ/105 (Why doesn't set -e (or set -o errexit, or trap ERR) do what I expected?). Execution stops after the diff when set -e is in effect because diff exits with non-zero status when the files that it is comparing are different. This kind of behaviour is one of the downsides of using set -e. Follow the links for more, and useful, information.

  • Related