我究竟做错了什么...?如果我在命令行上执行此操作然后调用它,但当我从 .profile 加载它时就不行了。 Linux Mint Qiana、Bash 4.*(如果重要的话)。
function android() { command /opt/android-studio/bin/studio.sh "$@" & disown ; }
export -f android
我尝试过缩短命令、扩展命令、删除分号并使用换行符......我想我还没有找到令人满意的妥协方案。在命令行上运行时没有错误,并且该函数确实按照上面列出的当前方式工作。
注意:通过“加载”,我的意思是与我正在编辑其 .profile 的同一用户打开一个新的终端会话...并且我正在使用诸如function
,之类的东西command
,disown
因为我从这个函数的简单版本开始,但它不是不起作用,所以我开始添加和删除一些东西,尝试获得正确的组合。命令行上一切都运行良好。
答案1
在 Ubuntu 和 Linux Mint 上,启动 GUI 会话的大多数方法,包括我认为默认的方法、原因/etc/profile
和~/.profile
由 读取/bin/sh
,而不是由 bash 读取。/bin/sh
dash 是一个 shell,它比 bash 速度更快,使用的内存更少,但缺少一些功能,例如函数导出。您~/.xsession-errors
必须包含类似.profile: 42: export: Illegal option -f
.
不要将函数放入环境中,而是在交互式 shell 的初始化文件中定义它们:~/.bashrc
。导出它们是没有意义的,因为每个交互式 shell 都会读取文件,而非交互式 shell 大多是 sh,而不是 bash,因此它们不会导入该函数 - 无论如何disown
在非交互式 shell 中没有用处。
答案2
传统上,bash 函数被放置~/.bashrc
在交互式 bash 中读取的位置。~/.profile
只能由登录 bash 读取。新窗口通常不运行登录bash。