在新的shell中运行bash命令,并在该命令执行后保留在新的shell中。

36

我有一个问题。我已经搜索了很长时间,想知道如何在新的bash shell中运行命令,并在命令执行后保留在这个NEW shell中。例如:

bash -c "export PS1='> ' && ls"

我想创建一个新的shell,导出PS1,列出目录等操作,并且不退出到当前shell,而是希望一直停留在新的shell中。


1
你能解释一下你想要实现什么吗?也许有其他的方法可以做到。 - dimba
@dimba 我不能代表danilo,但在我的情况下,我正在尝试通过ssh登录到我的Web服务器,进入应用程序目录,并为该应用程序打开一个rails控制台。 - Derek Dahmer
可能是调用bash,在新的shell中运行命令,然后将控制权交还给用户的重复问题。 - Ciro Santilli OurBigBook.com
3个回答

41

你可以通过滥用--rcfile选项来实现类似的效果:

bash --rcfile <(echo "export PS1='> ' && ls")

来自bash手册:

--rcfile file

如果shell是交互式的,执行文件中的命令,而不是从系统范围的初始化文件/etc/bash.bashrc和标准个人初始化文件~/.bashrc中执行。


2
谢谢!我能够以这种方式使用我的.bashrc文件作为基础! bash --rcfile <(echo "source "$HOME/.bashrc";export PS1='> ' && ls") - Aquarius Power
这正是我在寻找的。谢谢! - Some Newbie

2
对于初始命令集合是静态的且包含多个命令的情况,通常使用“here documents”来传递初始命令比构建一系列echo命令的脚本更容易。
这种方法有助于处理包含引号或各种扩展的命令。使用带引号的here-documents(3<<'__INIT__' ... '__INIT__')变体时,不会执行here document文本的扩展,从而消除了需要引用命令特定部分的需要。
与其这样:
bash --rcfile <(echo "export PS1='> ' && ls && command1 && command2")

使用
bash --rcfile /dev/fd/3 3<<'__INIT__'
export PS1='> '
ls
command1
command2
__INIT__

-1

懒惰者:

bash -c "export PS1='> ' && ls; bash"

12
这将启动另一个 shell,但不会遵循新提示符。 - Jack
对于5.0.3版本,我仍然停留在shell中,这使我得到了ls,但是PS1部分对我没有起作用。 - spiralofhope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接