0%

问题

一般情况下,sh 是指向 bash 的链接。查看 bash 的手册页可知,bash 作为 sh 运行时,相当于 bash --posix,即 sh 以符合 POSIX 标准的方式来运行。

在一次使用脚本的过程中,发现脚本中 alias 命令设置的别名始终无效。后来查资料发现,bashsh 运行脚本的结果是不同的。

默认情况下,bash 运行非交互式 shell 时,是关闭 alias 别名扩展功能的,而脚本就是非交互式 shell。但是,sh 同样的情况下是开启别名扩展功能的。

解决

① 使用 sh 运行脚本。

② 在脚本文件中显式地指出开启别名扩展功能,方法:

1
2
3
4
# 在脚本的 alias 命令之前添加如下命令
# 最好是在脚本的开头位置添加
shopt -s expand_aliases
...
阅读全文 »

Git 使用指定的密钥

默认情况,Git 会使用 ~/.ssh/id_ecdsa 来登录远程仓库,比如登录 github.com。我这里使用的是 ecdsa 算法,所以是 id_ecdsa

怎么样使用指定的密钥呢?比如使用 id_ecdsa_123。创建 ssh 配置文件 config 即可:

1
2
3
4
5
6
7
8
vim ~/.ssh/config

# 配置文件内容
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ecdsa_github
IdentitiesOnly yes

配置文件的含义:

  • Host github.com:指定一个主机
  • HostName github.com:上面指定的主机的主机名
  • User git:登录该主机的用户名,如果是登录 github.com,就必须是 git
  • IdentityFile ~/.ssh/id_ecdsa_github:关键配置,这里指定了使用哪个私钥文件
  • IdentitiesOnly yes:它指示 ssh 仅使用在命令行上指定的私钥文件或在 config 文件中配置的私钥文件
阅读全文 »

Git 的三种状态

下文的所有命令都在普通用户下执行,因此有些命令前会有 $ 号,系统是 Debian 9.6,Git 版本是 git version 2.11.0。本文参考:Pro Git v2 CHS 的第1章,第2章。

三种状态

已提交(committed)、已修改(modified)、已暂存(staged)

工作区的三个概念

有三种状态,相应的就有三个概念:Git 仓库、工作目录、暂存区域

已提交对应 Git 仓库,已修改对应工作目录,已暂存对应暂存区域。

Git 的基本工作流程

① 修改文件:在工作目录中修改文件。
② 暂存文件:将文件的快照放入暂存区域。
③ 提交更新:找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git 不像其他版本管理系统,比较文件的差异并记录下来,Git 是直接记录文件的快照。因此 Git 更像是一个小型的文件系统,它把数据看作是对小型文件系统的一组快照。文件系统快照可以理解成是,对文件或目录的修改(不论是增,删,改)记录快照,下次就能恢复到原样。它恢复的信息是很全面的,不仅有文件的数据,还可以有文件或目录的元数据,比如创建时间,修改时间等等。

阅读全文 »