shell 文件在源化时不做任何事情,但副本可以工作

u91tlkcl  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(101)

我在Ubuntu中有一个文件不适用于source,我不知道发生了什么。

$ cat .broken_file
export D='222'
$ cat .working_file_1
export D='88'
$ D=5
$ echo $D
5
$ source .working_file_1
$ echo $D
88
$ source .broken_file
$ ## What is happening here? It should be 222
$ echo $D
88

现在,这两个文件具有相同的权限:

$ ll .working_file_1 .broken_file
-rw-rw-r-- 1 my_user my_user
-rw-rw-r-- 1 my_user my_user

此外,如果我复制损坏的文件,新文件就可以工作了:

$ cp .broken_file .broken_file_copy
$ source .broken_file_copy
$ echo $D
222

所以它也不是文件的内容。
我可以修改我的.broken_file(更改变量和值的名称),但它仍然失败。

$ echo $SHELL
/bin/bash
$ echo $BASH_VERSION
5.1.16(1)-release
$ uname -srv
Linux 6.2.0-26-generic #26~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Jul 13 16:27:29 UTC 2

知道这是什么吗

更新type返回了一些奇怪的信息(我不知道如何解释):

$ type .broken_file
.broken_file is DIFFERENT_FOLDER/.broken_file
$ type .broken_file_copy
bash: type: .broken_file_copy: not found
3pmvbmvn

3pmvbmvn1#

您的PATH中是否有同名文件?来自source上的Bash docs的信息:
如果 filename 不包含斜杠,则PATH变量用于查找 filename,但 filename 不需要是可执行的。当Bash不处于POSIX模式时,如果在$PATH中找不到 filename,则搜索当前目录。
试着和

type .broken_file

这可能会起作用:

source ./.broken_file

相关问题