aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-10-04 23:04:55 +0200
committerTeddy Wing2017-10-04 23:04:55 +0200
commit607b3d30cbeb6b046b54c3d266b32331212392e8 (patch)
tree919d9dece393e87498fa4f28e47c25d45166a35d
parentc66735aced2373be9902d35c7f45267c8257ba21 (diff)
downloadqcd-607b3d30cbeb6b046b54c3d266b32331212392e8.tar.bz2
qcd: Allow database file to be symlinked
The `sed -i` calls in the "change" and "remove" commands will overwrite a symlinked database file with a real file, destroying the symlink. To prevent this and allow the database file to be symlinked (to, say, allow it to be tracked in a dotfiles repo), use a redirection technique as described here: https://www.cyberciti.biz/faq/howto-prevent-sed-i-from-destroying-symlinks-on-linux-unix/ Using this alternate method, we preserve symlinks, and even create a backup file as before.
-rwxr-xr-xqcd9
1 files changed, 7 insertions, 2 deletions
diff --git a/qcd b/qcd
index 091ba1a..8453b58 100755
--- a/qcd
+++ b/qcd
@@ -59,8 +59,12 @@ function __qcd_change_shortcut () {
if __qcd_shortcut_exists $shortcut; then
path=$(__qcd_absolute_path "$path")
+ cp $QCD_DATABASE_FILE "${QCD_DATABASE_FILE}.bak"
+
# The `//\//\/` escapes slashes in the path so that `sed` doesn't complain
- sed -i.bak -E "s/^${shortcut} .+$/${shortcut} ${path//\//\\/}/" $QCD_DATABASE_FILE
+ sed -E "s/^${shortcut} .+$/${shortcut} ${path//\//\\/}/" \
+ < "${QCD_DATABASE_FILE}.bak" \
+ > $QCD_DATABASE_FILE
fi
}
@@ -68,7 +72,8 @@ function __qcd_remove_shortcut () {
local shortcut=$1
if __qcd_shortcut_exists $shortcut; then
- sed -i.bak -E "/^${shortcut} .+/d" $QCD_DATABASE_FILE
+ cp $QCD_DATABASE_FILE "${QCD_DATABASE_FILE}.bak"
+ sed -E "/^${shortcut} .+/d" < "${QCD_DATABASE_FILE}.bak" > $QCD_DATABASE_FILE
fi
}