我想运行一个 bash 子 shell,(1) 运行几个命令,(2) 然后留在该子 shell 中执行我想做的事情。我可以分别执行以下每一项操作:
使用标志运行命令
-c
:$> bash -c "ls; pwd; <other commands...>"
但是,执行完命令后它会立即返回到“超级”shell。我也可以运行一个交互式子shell:
开始新
bash
流程:$> bash
并且它不会退出子 shell,除非我明确说明...但我无法运行任何初始命令。我找到的最接近的解决方案是:
$> bash -c "ls; pwd; <other commands>; exec bash"
它可以工作,但不是我想要的方式,因为它在一个子shell中运行给定的命令,然后打开一个单独的命令进行交互。
我想在一行中完成此操作。一旦我退出子 shell,我应该可以顺利返回常规“超级”shell。一定有办法~~
注意:我问的不是...
- 不询问在哪里可以找到 bash 手册页
- 没有询问如何从文件中读取初始化命令...我知道如何做到这一点,这不是我正在寻找的解决方案
- 不想使用 tmux 或 gnu screen
- 不想给出背景信息。也就是说,这个问题是一般性的,不针对任何特定目的
- 如果可能的话,我希望避免使用那些能达到我想要的效果,但又“肮脏”的变通方法。我只想在一行中完成这件事。特别是,我不想做类似的事情
xterm -e 'ls'
答案1
答案2
尝试一下这个:
$> bash -c "ls;pwd;other commands;$SHELL"
$SHELL
它使 shell 以交互模式打开,等待关闭exit
。
答案3
您可以使用临时文件以迂回的方式完成此操作,尽管这需要两行:
echo "ls; pwd" > initfile
bash --init-file initfile
答案4
您需要执行启动脚本,然后继续交互式会话。
默认启动脚本是~/.bashrc
,可以使用选项提供另一个脚本--init-file
。如果您只是传递一个--init-file
选项,您的脚本将代替默认,而不是增加它。
解决方案是使用语法传递<(...)
一个临时脚本,该脚本提供默认值,~/.bashrc
然后是任何其他命令:
bash --init-file <(echo ". ~/.bashrc; ls; pwd; ### other commands... ###")