bash - bash script.sh 和 ./script.sh 之间的区别
问题描述
假设我们的env.sh
文件包含:
echo $(history | tail -n2 | head -n1) | sed 's/[0-9]* //'
#寻找最后输入的命令
使用 执行此脚本时bash env.sh
,输出将为空:
但是当我们使用 执行脚本时./env.sh
,我们会得到最后输入的命令:
我只想知道他们之间的区别
请注意,如果我们#!/bin/bash
在脚本开头添加,./env.sh
将不再输出任何内容。
解决方案
默认情况下,BASH 在非交互式 shell 中禁用历史记录。但是,如果你想启用它,你可以这样做:
#!/bin/bash
echo $HISTFILE # will be empty in non-iteractive shell
HISTFILE=~/.bash_history # set it again
set -o history
# the command will work now
history
这样做的原因是为了避免任何 shell 脚本运行的任何命令弄乱历史记录。
在运行时将 hashbang(意味着文件将由 hashbang 中指定的程序解释为脚本)到您的脚本中,使用二进制文件即 run via./env.sh
调用您的脚本,因此再次不打印任何历史记录。/bin/bash
bash
推荐阅读
- csv - Kafka/Confluent CSV/SFTP 连接器和嵌套 json
- data-structures - 什么数据结构具有这些属性?
- sql - 使用子查询将 SQL 转换为 LINQ
- python - 在两个单独的文件中搜索字符串并使用 python3 仅打印匹配行的函数
- entity-framework - AutoMapper.Collection.EntityFramework System.InvalidOperationException 子集合删除实体
- django - Django Rest Framework - 为序列化程序编写一个显式的 .update() 方法
- python - 读取每列的第一个元素,然后读取 csv 文件中的整行
- applescript - 为什么使用 Applescript 库会阻止我运行 shell 脚本?
- html - 水平居中引导图标
- solr - 为什么我会收到错误:创建 SolrCore 时出错?