我使用screen
在Linux机器上,而我试图写它在完成后自动关闭一个新的,独立的屏幕会话中运行一个bash功能的(相当便携)功能。我已经取得了一些成功,但我注意到以下行为:发送猛砸别名来分离屏幕会话
如果我包括我的~/.bashrc
文件中的mail_submit()
定义,我可以运行
mail_submit foo
在终端
,而且我可以访问别名在一个新的屏幕会话:
screen -S test
mail_submit foo
然而,下面的命令不起作用:
screen -d -m -S test sh -c 'mail_submit foo'
可能是因为sh -c
启动了一个不知道我的~/.bashrc
配置文件的新壳。所以,我可以使用下面的解决办法:
screen -d -m -S test sh -c 'source ~/.bashrc; mail_submit foo'
这做工作。
但是,如果我想换这个功能成一个bash别名(这是我在这里的最终目标),这将导致一个奇怪的自我指涉的情况。
问题:什么是让sh -c知道我的~/.bashrc
配置文件位置的简单方法,或者使用源文件和创建别名的变体?
编辑:我救不了shell脚本在我的主目录,并创建运行
screen -d -m -S test bash -c '~/mail_submit.sh $1'
的别名,但我还是会好奇地听到其他可能的修复。
好抓;不幸的是这个问题依然存在,并且当我明确地给出'〜/ .bashrc'时也是如此。 – chriswhite
尝试使用'defshell -bash'设置〜/ .screenrc文件,这使得bash作为登录shell运行,它将调用〜./。bashrc文件,因为默认情况下,屏幕不会运行bash作为登录shell(读取.bashrc文件时)。有关更多信息,请参阅此帖子:https://bbs.archlinux.org/viewtopic.php?id = 82519 – Incognito