当前位置: 首页 > 面试题库 >

Bash脚本:使用bash脚本中的“ script”命令来记录会话

江鹏飞
2023-03-14
问题内容

我正在尝试使用script命令记录bash会话。

script命令是从bash脚本开始执行的,但是一旦执行,bash脚本就会终止。

我尝试使用各种组合来始终以相同的结果调用命令(调用该命令后立即终止bash脚本)。我得到的输出如下:

Script started, file is typescript
root@ubuntu: ...

我也尝试过最后用a来调用命令,&但是再次失败了。

谁能告诉我如何从bash脚本调用命令?

谢谢


问题答案:

您的Shell脚本没有终止。它仍在运行。您会收到提示,因为script正在生成新的shell。

用例为script

  1. 开始script(产生一个新的shell)
  2. 做命令
  3. 退出外壳程序(注销)并移至上一个外壳程序
  4. 检查或打印由创建的日志文件 script

因此基本上script可以按预期工作。您将必须找到另一种方式来实现您想要的。

您可以像这样记录脚本的执行

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO

说明:

  • exec > logfile 2>&1 将stdout和stderr重定向到日志文件
  • set -x 使bash在执行命令之前先打印所有命令

例:

$ ./foo.sh
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR

此方法的缺点是该脚本不打印任何输出供人类查看。一切都进入日志文件。

另外,您也可以这样:

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO

然后像这样执行:

$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript
$ cat typescript 
Script started on Mi 18 Mai 2011 01:05:29 CEST
+ FOO=BAR
+ echo BAR
BAR

Script done on Mi 18 Mai 2011 01:05:29 CEST


 类似资料:
  • 问题内容: 我有一个python脚本,该脚本在运行时会在终端上记录信息,我想将此记录信息发送到文本文件, 为了实现这一点,我正在插入文件 在文件末尾,我放入 问题是当它调用第一个命令时,它将终止脚本, 提前感谢我如何做这项工作的任何建议 问题答案: 问题在于,直到退出产生的外壳程序才返回,这时您的Python脚本将恢复。 执行所需操作的最简单方法是使用Python脚本作为参数来调用自身。代替 您将

  • 我已经写了一个脚本,在我的Ubuntu发行版上作为自动点击器工作。点击工作,但'sleep‘命令似乎不能正常工作。如果我取出click并从terminal运行它,那么sleeps将按预期工作。但是当我将它绑定到一个快捷方式并且在玩游戏的时候运行它的时候,它并没有Hibernate,看起来它只是一直点击。 最重要的Hibernate是break_intervalHibernate,因为它将高压灭菌器

  • 问题内容: 我正在尝试使用bash脚本将JSON文件上传到我的noSQL数据库中,但是它不起作用,我也不明白为什么。 这是脚本: 这是错误: 当我执行命令行中给出的命令时,它仍然可以正常工作。 这是什么错误?谢谢 问题答案: 不要将命令存储在变量中;如果您绝对必须具有可用于日志记录的内容,请将 参数 放入数组中。

  • 问题内容: 我正在使用Bash脚本来自动化一些与telnet相关的任务。一旦自动化,用户与telnet之间将不会进行任何交互。(这将是完全自动化的) 脚本看起来像这样: 我在这里面临2个问题: 如何从脚本(无需人工干预)在远程系统上执行命令? 根据我对一些测试代码的经验,我可以推断出在执行 telnet 10.1.1.1 时,telnet进入了一个交互式会话,并且脚本中的后续代码行在本地系统上执行

  • 当我试图登录本地postgres数据库并提交查询时,我的BASH脚本中的psql命令遇到了问题。我以以下方式使用该命令: 但是,我收到以下错误消息。 PSQL: FATAL:用户"postgres"的身份验证失败 在我将以下更改附加到 /var/lib/pgsql/data/pg_hba.conf后,从命令行运行非常好: 本地所有信任 托管所有127.0.0.1/32信任 另外,能否验证一下这一点

  • 在我的/home/mobaxterm命令提示符下,我可以使用new tab“command”来启动一个新的选项卡并执行一个命令。当我在bash脚本中使用它时,我得到“newtab: command not found”。 是否需要特殊的编码来使用MobaXword命令行参数,如这里所示:bash脚本中的https://blog.mobatek.net/post/mobaxterm-command-