git 别名现在无法说出"read: illegal option -t"



我刚刚将我的git配置导入到运行 Ubuntu20.04 的新笔记本电脑上,但由于某种原因,使用 Bashread内置的git别名现在很少失败。

[alias]
try = "!read -t 5 -n 1 -p 'Confirm? [Y|n] '"
$ echo "$SHELL, $(git --version)"
/bin/bash, git version 2.25.1
$ GIT_TRACE=1 git try
23:57:46.840752 git.c:703               trace: exec: git-try
23:57:46.840829 run-command.c:663       trace: run_command: git-try
23:57:46.841147 run-command.c:663       trace: run_command: 'read -t 5 -n 1 -p '''Confirm? [Y|n] ''''
read -t 5 -n 1 -p 'Confirm? [Y|n] ': 1: read: Illegal option -t

此线程建议调用sh,在这种情况下,内置read没有 -t 选项。

鉴于它曾经在我以前的笔记本电脑上工作......而不是依赖一些解决方法,例如在别名命令前面加上bash -c,这里使用的 shell 是可以配置的东西吗?

谢谢。

一般来说,在 Linux 上,确保特定解释器运行特定脚本(此处的脚本是指存储在标记为可执行文件的文件中的命令)的方法是让文件以#!开头,后跟解释器的路径名。 (你可以在#!和口译员之间放一个空格,我通常会这样做。

在这种情况下,这意味着使用脚本而不是别名。 将程序命名为git-try,将其放在$PATH上的目录中,git try将运行git-try脚本。 现在,您可以让脚本以#! /bin/bash开头,以确保它以 bash 运行。

如果你真的希望它是一个别名而不是一个脚本,正确的解决方案是调用bash -c,正如KamilCuk在评论中所说。

(有时口译员会四处走动,因此#! /usr/bin/env python3是一种解决不知道python3是否会/usr/bin/usr/local/bin的问题的方法。 由于 bash 通常在/bin/bash这里的问题不大。

我以前的笔记本电脑运行Fedora 33,其中sh指向Bash。而在运行Ubuntu的新笔记本电脑上,sh指出Dash正如@KamilCuk在评论中指出的那样。

现在,无法将git配置为使用特定的 shell 作为别名。

在别名中使用bash -c有几种替代方法。

首先,您可以将/bin/sh设置为指向bash而不是dash。在 Ubuntu 上,您可以使用以下内容执行此操作:

sudo dpkg-reconfigure dash

在对话框中选择"是"以将其保留为dash,选择"否"将其设置为bash。在某些脚本和启动过程中会有一些减速,但对您来说可能并不明显。如果您愿意,您可以随时使用相同的命令将其设置回来。

其次,您可以通过以下方式下载git源代码:

git clone https://github.com/git/git

然后将所有出现的/bin/sh替换为/bin/bash并编译您自己的自定义版本的git。这可能看起来有点极端,但是如果你不偶尔做一些疯狂的事情,那么运行Linux有什么乐趣呢!

相关内容

  • 没有找到相关文章

最新更新