我在.bashrc文件中写了一个别名,每次启动bash shell时都会打开一个txt文件。 问题是我想只打开一次这样的文件,这是我第一次打开shell。
有没有办法做到这一点?
答案 0 :(得分:1)
此问题的一般解决方案是具有某种会话锁定。您可以使用正在编辑其他文件的进程的pid和/或tty创建文件/ tmp / secret,并在完成后删除锁定文件。现在,您的其他会话应设置为不创建此文件(如果已存在)。
正确锁定是一个复杂的主题,但对于简单的情况,这可能已经足够了。如果没有,请谷歌进行“互斥”。请注意,如果您弄错了可能会产生安全隐患。
为什么要为此使用别名?听起来代码应该直接在你的.bashrc中,而不是在别名定义中。
因此,如果您在.bashrc
中拥有的内容类似于
alias start_editing_my_project_work_hour_report='emacs ~/prj.txt &̈́'
start_editing_my_project_work_hour_report
unalias start_editing_my_project_work_hour_report
...然后使用锁定,没有别名,你可能会得到像
这样的东西# Obtain my UID on this host, and construct directory name and lock file name
uid=$(id -u)
dir=/tmp/prj-$uid
lock=$dir/pid.lock
# The loop will execute at most twice,
# but we don't know yet whether once is enough
while true; do
if mkdir -p "$dir"; then
# Yay, we have the lock!
( echo $$ >"$lock" ; emacs ~/prj.txt; rm -f "$lock" ) &
break
else
other=$(cat "$lock")
# If the process which created the UID is still live, do nothing
if kill -0 $other; then
break
else
echo "removing stale lock file dir (dead PID $other) and retrying" >&2
rm -rf "$dir"
continue
fi
fi
done