如何让 `~/.bash_profile 的一部分只在 shell 打开时执行?
How to have a part of `~/.bash_profile execute only on shell open?
我一直在寻找这个答案,也许这是一条我不知道的死路。我是 运行 Ubuntu 20.04 我现在有这个 bash_profile:
export MAG_DIR="/var/www/html/magento-2"
export NGINX_ERR="/var/log/nginx/error.log"
export MAG_ERR="/var/www/html/magento-2/var/log/system.log"
export XDEBUG_LOG="/var/log/xdebug/xdebug.log"
export PHP_FPM_CONF="/etc/php/7.3/fpm/php.ini"
export PHP_CLI_CONF="/etc/php/7.3/cli/php.ini"
export PHP_LOG="/tmp/php-error.log"
function wgrep () {
grep -nA 3 -B 3 ;
}
function findfirst () {
find -name | head -n 1
}
function catfirst () {
cat $(find -name | head -n 2)
}
function t30 {
tail -fn 30 ;
}
function fac {
git fetch && git checkout ;
}
#if [ -f ~/.bashrc ]; then
# . ~/.bashrc
#fi
if [ -f ~/.bash_vars ]; then
. ~/.bash_vars
fi
export PS1="\D{%H:%M:%S} \[\e]0;\u@\h: \w\a\] ${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]$ "
#local setup
[ ! -f $PHP_LOG ] && touch $PHP_LOG
chmod 777 $PHP_LOG
cd $MAG_DIR
clear
我想将最后几行(为新会话设置 shell 的内容迁移到单独的脚本中,该脚本仅在 shell 时运行 首次创建.
我喜欢在工作时调整我的 /.bash_profile
,它来源于 ~/.bashrc
所以如果我在 ~/.bash_profile 中进行修改并想查看更改,目前我将被引导回我的开发目录。它还会对日志文件等文件进行冗余更改。这些登录 'setup' 操作可能会随着时间的推移而改变
我知道 .bash_login
存在,但我似乎无法让它为我工作。我将我的终端首选项设置为 'run command as login' 或任何设置,然后它忽略了我的 ~/.bash_profile
(我猜这可能是预期的行为)
p.s: `~/.bash_vars 包含随机变量,我想在 env 与 env 之间变化或保留一些秘密,因为这个bash_profile 版本化
从 OP 问题来看,目标是让 .bash_profile
的尾部仅在初始 shell 上执行,而不在子 shell 上执行。一种可能的解决方案是跟踪导出变量中的一次性执行。
if [ ! "$FIRST_TIME" ] ; then
export FIRST_TIME=YES
[ ! -f $PHP_LOG ] && touch $PHP_LOG
chmod 777 $PHP_LOG
cd $MAG_DIR
clear
fi
鉴于在这个例子中,'.bashrc' 是源'.bash_profile',受“FIRST_TIME”保护的命令将不会在交互式子[=18=上执行].
我一直在寻找这个答案,也许这是一条我不知道的死路。我是 运行 Ubuntu 20.04 我现在有这个 bash_profile:
export MAG_DIR="/var/www/html/magento-2"
export NGINX_ERR="/var/log/nginx/error.log"
export MAG_ERR="/var/www/html/magento-2/var/log/system.log"
export XDEBUG_LOG="/var/log/xdebug/xdebug.log"
export PHP_FPM_CONF="/etc/php/7.3/fpm/php.ini"
export PHP_CLI_CONF="/etc/php/7.3/cli/php.ini"
export PHP_LOG="/tmp/php-error.log"
function wgrep () {
grep -nA 3 -B 3 ;
}
function findfirst () {
find -name | head -n 1
}
function catfirst () {
cat $(find -name | head -n 2)
}
function t30 {
tail -fn 30 ;
}
function fac {
git fetch && git checkout ;
}
#if [ -f ~/.bashrc ]; then
# . ~/.bashrc
#fi
if [ -f ~/.bash_vars ]; then
. ~/.bash_vars
fi
export PS1="\D{%H:%M:%S} \[\e]0;\u@\h: \w\a\] ${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]$ "
#local setup
[ ! -f $PHP_LOG ] && touch $PHP_LOG
chmod 777 $PHP_LOG
cd $MAG_DIR
clear
我想将最后几行(为新会话设置 shell 的内容迁移到单独的脚本中,该脚本仅在 shell 时运行 首次创建.
我喜欢在工作时调整我的 /.bash_profile
,它来源于 ~/.bashrc
所以如果我在 ~/.bash_profile 中进行修改并想查看更改,目前我将被引导回我的开发目录。它还会对日志文件等文件进行冗余更改。这些登录 'setup' 操作可能会随着时间的推移而改变
我知道 .bash_login
存在,但我似乎无法让它为我工作。我将我的终端首选项设置为 'run command as login' 或任何设置,然后它忽略了我的 ~/.bash_profile
(我猜这可能是预期的行为)
p.s: `~/.bash_vars 包含随机变量,我想在 env 与 env 之间变化或保留一些秘密,因为这个bash_profile 版本化
从 OP 问题来看,目标是让 .bash_profile
的尾部仅在初始 shell 上执行,而不在子 shell 上执行。一种可能的解决方案是跟踪导出变量中的一次性执行。
if [ ! "$FIRST_TIME" ] ; then
export FIRST_TIME=YES
[ ! -f $PHP_LOG ] && touch $PHP_LOG
chmod 777 $PHP_LOG
cd $MAG_DIR
clear
fi
鉴于在这个例子中,'.bashrc' 是源'.bash_profile',受“FIRST_TIME”保护的命令将不会在交互式子[=18=上执行].