【问题标题】:get last command line entry from bash in a tcsh shell script在 tcsh shell 脚本中从 bash 获取最后一个命令行条目
【发布时间】:2015-07-07 18:38:46
【问题描述】:

tcsh 中是否有命令可以获取最后输入到 shell 的命令?

问题是当我将 shell 从 bash 切换到 tcsh 时,最后一个命令将是来自 bash shell 的“tcsh”。我需要某种shell间通信来做到这一点吗?我可以尝试阅读我的 bash 历史记录中的最后一行,这会起作用……我想……也许有时?

问题来了:

我想制作我的默认 shell bash。目前是 tcsh。我没有管理员权限,但我可以修改我的 rc 文件。现在我可以通过从我的 .tcshrc 文件中放置“bash”或“exec bash”来解决问题。但是,这显然会阻止我使用 tcsh,因为如果我尝试它会运行 rc 文件并切换回 bash。

这是我的想法:

如果最后一个命令是“tcsh”,则将 if 语句写入我的 .cshrc 文件以跳过 bash 命令。

它应该看起来像这样:

if ( STATEMENT HERE ) then
    bash 
endif

当最后一个进入 shell 的命令是“tcsh”时,“STATEMENT HERE”应该是假的。

【问题讨论】:

  • 即使没有 root 权限,您仍然应该能够运行 chsh 来更改您的默认 shell。
  • 使用您在启动bash 之前设置的环境变量来指示您是否已经自动启动bash
  • 运行 chsh 是我在尝试时在网上找到的另一个建议,它说我必须使用“ypchsh”......所以我尝试了这个并输入了我的密码,它说“登录 shell 已更改”。然后我关闭终端窗口并打开另一个窗口,遗憾的是它仍然以 tcsh 的形式打开。也许我需要一些标志或选项?我从其他在线建议中绑定的所有选项都会导致错误。我只是在阅读有关此的更多信息,也许它有效,我必须注销并重新登录...我会尝试的。
  • 我可以创建一个环境变量。我喜欢。这会让我到一个更好的地方。然而,我希望最终能够在不设置环境变量的情况下做到这一点。
  • 您是否尝试过要求管理员更改您的登录 shell?

标签: linux bash shell scripting tcsh


【解决方案1】:

如果您确实无法更改登录 shell,请尝试以下操作:

exec bash -l

在 ~/.login 中,而不是 .cshrc 或 .tcshrc,这样您的 tcsh 登录 shell 会立即被 bash 登录 shell 替换。

如果主要目标是让您的登录会话在 bash 中开始,那么处理 ~/.bash_history 或 ~/.history 内容似乎很尴尬。

【讨论】:

  • 谢谢。这个问题让我很沮丧。在剩下的时间里,我将保持原样。我明天试试你的工作。我应该能够使用像 ypchsh 这样简单的东西,但这对我来说并没有发生,这是有道理的。也许我吹了一些错别字并没有看到它们。在我尝试了你的想法后,我会回去再尝试其他的。
猜你喜欢
  • 2012-10-16
  • 2012-10-11
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2013-02-14
  • 2020-01-02
  • 2018-09-06
相关资源
最近更新 更多