【问题标题】:How to run exec bash command from the bash script in Linux (ubuntu)?如何从 Linux(ubuntu)中的 bash 脚本运行 exec bash 命令?
【发布时间】:2015-02-10 05:12:33
【问题描述】:

我有一个 bash 脚本,我想运行这些命令。

First-Command \
&& exec bash \
&& Last-Command

exec bash 会以上述方式抛出错误。 ^^

如果我这样写:

First-Command;
exec bash;
Last-Command

这种方式不适合我,因为我只想在 First-Command 完成后运行 exec bash。

这种情况有解决办法吗?

我们可以将一些编辑器应用程序连接到终端并通过该编辑器应用程序向终端提交命令吗?

谢谢。 问候, 优素福

【问题讨论】:

  • 错误是什么?您可能需要通过以反斜杠结束前两行来连接三行。但也要注意下面的答案,不带 exec 运行 bash,否则不会运行 last-command。
  • 是的,我错过了\。阅读我对约翰的回复
  • 好的,我明白了。我不必运行 exec bash。只需运行 bash 就会刷新 bash,我很高兴。所以我可以在最后一行添加 && bash。但是如果我在命令之间添加 && bash 之后的命令将不起作用。
  • 内部 bash 必须成功退出才能运行 && 最后一个命令。为了允许出现错误,您可以将最后一个命令与 ; 分开,以便在 bash 完成后无条件地运行它。以分号分隔的命令依次运行,每个命令在完成之前的命令之后开始。
  • 对的安德拉斯。我接到你了。更改主机名后如果我使用 sudo 命令,操作系统将无法解析主机。如何通过脚本刷新 bash,以便 sudo 命令和更改主机名后一切正常。不使用 exec bash 或 bash,因为这将丢弃当前 bash 并加载新的或当前 bash 将被推送到后台...

标签: linux bash shell ubuntu exec


【解决方案1】:

exec 将运行中的bash 替换为命令(在本例中为新的bash)。它永远不会返回,因此将&& 放在它之后是荒谬的。您可以通过删除 exec 来修复它。

【讨论】:

  • 我正在尝试通过 bash 脚本自动化 hadoop。更改 .bashrc 文件、hadoop 配置文件、/etc/hosts、/etc/hostname 后,我需要运行 exec bash。因为我无法从脚本运行 exec bash,因为它将启动一个新的 bash,所以我必须手动执行这些操作。有没有我不必手动完成的工作?观看此视频,您会明白我想说什么:youtube.com/watch?v=J61W9qXtuUE。最后 hadoop 命令不起作用,所以我不得不运行 exec bash。
  • 好的,我运行了这个。第一行:{echo "hello" \} 第二行:{&& bash \} 第三行:{&& echo "bye"}。 “再见”不会打印在屏幕上?
  • 退出中间的bash 后会打印“再见”。换句话说,你需要输入“exit”或“Ctrl-D”(给出EOF)。
  • 好的,现在我理解了 bash 命令的概念。它将开始一个新的 bash。我认为它只是刷新了当前的 bash。你能检查一下吗: sudo sed -i '1s/.*/newhostname/' /etc/hostname \ && sudo hostname newhostname \ && sudo sed -i 's/old-hostname/newhostname/g' /etc/hosts.现在,如果我在这 3 个命令之后执行 sudo,则在执行 exec bash 或 bash 之前,sudo 将不起作用。有没有办法在不重新启动/关闭当前 bash 的情况下“刷新”bash(因为 bash 启动新的,而 exec bash 启动新的并退出旧的)?
  • “sudo 不起作用”是什么意思?是不是因为主机改名了?它会给你一个错误信息吗? “不工作”是什么意思?
最近更新 更多