小编Jef*_*ett的帖子

hash 命令的目的是什么?

如果您运行hash它,它会显示自上次重置哈希后运行的所有命令的路径 ( hash -r)

[root@c04c ~]# hash
hash: hash table empty

[root@c04c ~]# whoami
root

[root@c04c ~]# hash
hits    command
   1    /usr/bin/whoami

[root@c04c ~]# whoami
root

[root@c04c ~]# hash
hits    command
   2    /usr/bin/whoami
Run Code Online (Sandbox Code Playgroud)

根据手册页,哈希的目的是:

/usr/bin/hash 实用程序影响当前 shell 环境记住找到的实用程序位置的方式。根据指定的参数,它将实用程序位置添加到其记住的位置列表或清除列表的内容。当没有指定参数时,它报告列表的内容。该-r选项会导致外壳忘记所有记住的位置。

散列不报告作为 shell 内置程序提供的实用程序。

除了查看我输入了多少次命令之外,我看不到hash.

它甚至出现在 thegeekstuff.com 的前 15 个有用命令中

在哪些方面hash有用?

bash history

129
推荐指数
5
解决办法
9万
查看次数

如何在一个命令中创建文件和父目录?

是否有一个标志/选项touchmkdir>,或其他一些命令,让我产生在同一时间一个文件和任何不存在的父目录?

例如,假设我在一个空文件夹中。现在,如果创建文件夹时父目录不存在,我可以创建它们

mkdir -p nested/folder
Run Code Online (Sandbox Code Playgroud)

我可以在现有目录中创建文件

touch nested/folder/something.txt
Run Code Online (Sandbox Code Playgroud)

但是我无法在尚不存在的目录中创建文件

touch nested/folder/deep/more.txt
Run Code Online (Sandbox Code Playgroud)

触摸:无法触摸“嵌套/文件夹/深度/更多.txt”:没有这样的文件或目录

我如何在创建该deep文件夹的同时创建该文件夹more.txt

command-line directory directory-structure touch mkdir

46
推荐指数
1
解决办法
6万
查看次数

如何在脚本中使用空格作为变量格式化日期输出?

我想date用这样的格式制作命令:

$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Run Code Online (Sandbox Code Playgroud)

但我想把它保存在变量中,所以我可以像这样从脚本调用: echo "$(nice_date) [WARNING] etc etc"

但是它不起作用

$ nice_date="date +%Y-%m-%d %H:%M:%S"
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S’
Try 'date --help' for more information.

$ nice_date="date +\"%Y-%m-%d %H:%M:%S\""
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.

$ nice_date='date +"%Y-%m-%d %H:%M:%S"'
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么,以便 date 命令获得一个正确的参数?

bash date

15
推荐指数
2
解决办法
4万
查看次数

如何在命令执行时标记提示?

如何在命令启动时将时间戳附加到提示中?我正在寻找一种介于静态提示连续时钟之间的解决方案。

主要区别在于静态提示将显示加载提示的时间。如果我让它静置几分钟,然后输入一个命令,那就是我想要添加另一个时间戳的时候。我的目标是能够轻松查看执行命令所需的时间差,以及提示闲置多长时间。除了我想使用 bash 之外,连续时钟答案的问题在于它会丢失开始时间戳,因为它会刷新整个事物。

例如,当我打开一个新的 shell 时,我希望我的提示看起来像这样:

10:30:21 jeff ~ $
Run Code Online (Sandbox Code Playgroud)

然后假设它在我真正完成输入命令并点击之前就在那里停留了一分钟 Enter

10:30:21 jeff ~ 10:31:28 $ ./long_running.sh
10:36:52 jeff ~ $
Run Code Online (Sandbox Code Playgroud)

请注意,它附加了另一个时间戳,显示我实际执行命令的时间。通过从下一个提示的开始时间戳中减去,我可以很容易地看到该命令大约需要 5 分钟才能运行。

bash prompt timestamps

5
推荐指数
1
解决办法
1811
查看次数