我通常在.bashrc文件中添加多个别名和bash函数。例如g代表“ grep -nri ...”,v代表vim等。但是有时我的新操作系统中有一些cmds被我的别名覆盖,因此我看到意外的构建失败。
是否有任何方法可以在bashrc中添加别名/功能,而该别名/功能应仅在交互式shell上运行,而不应该通过makefile或其他脚本运行?
谢谢...
答案 0 :(得分:1)
默认情况下,bash别名的扩展在非交互式会话中是禁用的(例如,在执行脚本时)。
您是不是在.bashrc / .profile中执行shopt -s expand_aliases
?这样可以在非交互式会话中扩展别名。
为了100%安全,您可以在运行例如以下命令之前执行shopt -u expand_aliases
制作脚本。这将取消设置expand_aliases
标志。
另一种方法是在运行非交互式会话时完全停止获取bash配置文件。这是通过在您的.profile或.bashrc中添加以下行来实现的:
[[ $- =~ i ]] && return
该行之前的代码仍在非交互式会话中执行。确保在下面添加自定义别名和功能。
答案 1 :(得分:0)
不应为非交互式外壳定义别名和快捷方式功能,因为其他外壳脚本可能会与您的自定义混淆(如您所知)。如果执行脚本的外壳不需要读取和处理所有自定义项,则对性能也有好处。
通常,您可以通过int currentPosition = mViewPager.getCurrentItem();
mPagerAdapter.notifyDataSetChanged();
mViewPager.setAdapter(null);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setCurrentItem(currentPosition);
末尾的保护子句来执行此操作。将您的自定义设置放在该防护之后。
~/.bashrc