# limitations under the License.
cedit() {
- local help="Usage: [-h|--help ] [-v] [SECTION_NAME] FILE
+ local help="Usage: [-h|--help ] [-v] [SECTION_NAME] FILE
Create/modify a section in a config file
Returns 1 if the file is modified by this command, 2 or higher
-v Verbose
-b Keep backup file
-h|--help Help"
- local s diff name init
- local file_dir="$(dirname "$file")"
- local exists=true
- local verbose=false
- local backup=false
-
- case $1 in
- -b) backup=true; shift ;;
- -v) verbose=true; shift ;;
- -h|--help) echo "$help"; return ;;
- esac
-
- if (( $# == 2 )); then
- name=": $1"
- shift
+ local s diff name init
+ local file_dir="$(dirname "$file")"
+ local exists=true
+ local verbose=false
+ local backup=false
+
+ case $1 in
+ -b) backup=true; shift ;;
+ -v) verbose=true; shift ;;
+ -h|--help) echo "$help"; return ;;
+ esac
+
+ if (( $# == 2 )); then
+ name=": $1"
+ shift
+ fi
+
+ local file="$1"
+ local file_name="${file##*/}"
+
+ local begin="#_#_# start delimiter of cedit section$name. do not modify. #_#_#"
+ local end="#_#_# end delimiter of cedit section$name. do not modify. #_#_#"
+
+ if [[ ! -e $file_dir ]]; then
+ if ! mkdir -p $file_dir; then
+ s=sudo
+ $s mkdir -p $file_dir || return 2
fi
-
- local file="$1"
- local file_name="${file##*/}"
-
- local begin="#_#_# start delimiter of cedit section$name. do not modify. #_#_#"
- local end="#_#_# end delimiter of cedit section$name. do not modify. #_#_#"
-
- if [[ ! -e $file_dir ]]; then
- if ! mkdir -p $file_dir; then
- s=sudo
- $s mkdir -p $file_dir || return 2
- fi
- fi
- if [[ ! -e $file ]]; then
- exists=false
- if ! $s touch $file; then
- s=sudo
- $s touch $file || return 2
- fi
+ fi
+ if [[ ! -e $file ]]; then
+ exists=false
+ if ! $s touch $file; then
+ s=sudo
+ $s touch $file || return 2
fi
-
- [[ -w $file ]] || s=sudo
-
-
- if $exists; then
- local temp="$(mktemp -d)/$file_name"
- cp "$file" "$temp"
- cp /dev/null "$file"
- local in_section=false
- while IFS= read -r line; do
- if [[ $line == $begin ]]; then
- in_section=true;
- fi
- if ! $in_section; then
- printf '%s\n' "$line" >> $file
- fi
- if [[ $line == $end ]]; then
- in_section=false;
- fi
- done < "$temp"
- fi
-
- IFS= read -d '' -n 1 -r init
- if [[ $init ]]; then
- $s tee -a "$file" >/dev/null <<<"$begin"
- printf '%s' "$init" | $s tee -a "$file" >/dev/null
- $s tee -a "$file" >/dev/null
- $s tee -a "$file" >/dev/null <<<"$end"
+ fi
+
+ [[ -w $file ]] || s=sudo
+
+
+ if $exists; then
+ local temp="$(mktemp -d)/$file_name"
+ cp "$file" "$temp"
+ cp /dev/null "$file"
+ local in_section=false
+ while IFS= read -r line; do
+ if [[ $line == $begin ]]; then
+ in_section=true;
+ fi
+ if ! $in_section; then
+ printf '%s\n' "$line" >> $file
+ fi
+ if [[ $line == $end ]]; then
+ in_section=false;
+ fi
+ done < "$temp"
+ fi
+
+ IFS= read -d '' -n 1 -r init
+ if [[ $init ]]; then
+ $s tee -a "$file" >/dev/null <<<"$begin"
+ printf '%s' "$init" | $s tee -a "$file" >/dev/null
+ $s tee -a "$file" >/dev/null
+ $s tee -a "$file" >/dev/null <<<"$end"
+ fi
+
+ if ! $exists; then
+ ret=1
+ if $verbose; then
+ echo "New file $file:"
+ cat "$file"
fi
-
- if ! $exists; then
- ret=1
- if $verbose; then
- echo "New file $file:"
- cat "$file"
- fi
- elif type -t diff &>/dev/null; then
- diff=$(diff -u "$temp" "$file")
- ret=$?
- if $verbose; then
- if (( $ret == 0 )); then
- echo "No changes made to $file"
- fi
- else
- echo "backup of original at $temp"
- echo diff -u "$temp" "$file":
- echo "$diff"
- fi
- else
- # for systems like openwrt which don't have diff
- diff=$(cmp "$temp" "$file")
- ret=$?
- if $verbose; then
- echo "$diff"
- fi
+ elif type -t diff &>/dev/null; then
+ diff=$(diff -u "$temp" "$file")
+ ret=$?
+ if (( $ret )); then
+ echo "backup of original at $temp"
+ echo diff -u "$temp" "$file":
+ echo "$diff"
+ elif $verbose; then
+ echo "No changes made to $file"
fi
- if ! $backup; then
- rm -r $"$temp"
+ else
+ # for systems like openwrt which don't have diff
+ diff=$(cmp "$temp" "$file")
+ ret=$?
+ if $verbose; then
+ echo "$diff"
fi
- return $ret
+ fi
+ if ! $backup; then
+ rm -r $"$temp"
+ fi
+ return $ret
}
cedit "$@"