当命令来自文件时,为什么'history'不会在tcsh中输出任何内容?

时间:2012-02-06 14:24:05

标签: shell tcsh

当我们在tcsh中输入“history”时,我们可以看到历史命令列表,如下所示:

ubuntu:~> echo a
a
ubuntu:~> history
     1  9:20    echo a
     2  9:20    history

但是,如果我们将命令存储在文件“commands.txt”

echo a
history

我们通过

将此文件的内容重定向到tcsh
tcsh < commands.txt

我们只能看到:

a

为什么会这样?为什么shell提示符不是输出的一部分?

顺便说一下,它实际上适用于bash,你只需要打开历史选项就像这样

set -o history
echo a
history

2 个答案:

答案 0 :(得分:0)

这可能不是为什么这个问题的完美答案。但至少它给你一些信息,不在脚本中使用历史命令。

http://www.tldp.org/LDP/abs/html/special-chars.html 搜索你找到的“历史”:

  

请注意,在脚本中,历史记录机制已禁用。

您可以在页面末尾的http://tldp.org/LDP/abs/html/histcommands.html中找到

Unfortunately, the Bash history tools find no use in scripting.

#!/bin/bash
# history.sh
# A (vain) attempt to use the 'history' command in a script.

history                      # No output.

var=$(history); echo "$var"  # $var is empty.

# History commands disabled within a script.

bash$ ./history.sh (no output)

答案 1 :(得分:0)

history 命令是内置的tcsh,因此不像普通命令那样。根据“Csh Programming Considered Harmful”咆哮,第2a节说

  
    

你不能以合理的方式将[内置插件]放在一起。

  

我不确定它甚至是合理的方式。并且脚本不会打印命令提示符。