如何启动 bash 并立即在其中“输入”命令?

如何启动 bash 并立即在其中“输入”命令?

我希望 bash 首先执行一个命令,但是在命令完成(或Ctrl+ C'ed)后进入交互模式(最好使用历史记录中的命令,可供up)。

如何以最简单、最美丽的方式实现它?

受到 cmd.exe 的启发/K

$ wineconsole cmd.exe /K echo qqq
qqq

Z:\home\wine>

答案1

更清洁的版本斯科特的回答

  1. 把这个放到.bash_profile

    if [ ! -z "$EXECUTE_COMMAND" ]; then
        history -s "$EXECUTE_COMMAND"
        $EXECUTE_COMMAND
    fi
    
  2. 以此方式启动 bash:

    $ EXECUTE_COMMAND='ping 127.0.0.1' bash -l
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
    64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.177 ms
    ...
    ^C
    5 packets transmitted, 5 received, 0% packet loss, time 3996ms
    $
    $ ping 127.0.0.1
    

答案2

我不能 100% 确定我完全理解了您的要求,并且(唉)我bash目前无法访问带有该系统的系统,但也许以下内容会对您有所帮助。请将其放在您的末尾.bashrc

如果 [ -f ~/.bash_initial_command ]
然后
    .~/.bash_initial_command
    rm ~/.bash_initial_command

(其中.bash_initial_command是任意文件名;如果需要,可以选择其他文件名),然后编写执行以下操作的脚本:

(echo“history –s'$@'”;echo“$@”)>~/.bash_initial_command

即,这会将命令(作为参数呈现给上述脚本)放置在下一个要bash启动的交互将找到并执行它的位置。(例如,如果您运行set_up_cmd ls –l,则下一个bash将运行ls –l。)  history –s将命令放入历史记录而不执行它。
笔记:我不知道这是否会起作用.bashrc

如果您想要使用带有引号的命令(即,带引号的特殊字符)或重定向(<>),或者复合命令(即,包含;|&&||),则需要进一步细化。

一个小问题:如果你使用Ctrl+C命令,这可能会终止.bashrc处理,从而阻止.bash_initial_command文件被删除。你可以通过以下方式处理这个问题:

如果 [ -f ~/.bash_initial_command ]
然后
    mv ~/.bash_initial_command ~/.bash_initial_command.$$
    陷阱“rm -f ~/.bash_initial_command.$$” 0
    .~/.bash_initial_command.$$
    rm -f ~/.bash_initial_command.$$

这给出了.bash_initial_command一个唯一的名称,以避免冲突,并安排在 shell 退出时将其删除。

如果您需要同时启动其中几个,请考虑将“tty”名称构建$(basename $(tty)).bash_initial_command文件名中。

当然,这样做使得确保您的主目录除了您自己之外任何人都无法写入变得更加重要。

答案3

您可以将命令添加到您的.bash_profile.bashrc。它将在您打开新窗口或登录到您的机器时立即运行。

关于两个文件之间差异的页面。

相关内容