运行更新后的脚本仍然运行旧脚本(预更新版本)



我在文件夹~/bin/中有一个脚本(a.sh)。然后我创建了一个符号链接(a)并将其复制到/usr/local/bin/

在我对~/bin/中的脚本进行更改后,我将目录更改为~并键入a(不带引号)。我的shell仍然运行旧的脚本。

要运行脚本与我的变化,我必须键入. ~/bin/a.sh

我发现重新创建符号链接,然后将其复制到/usr/local/bin/工作,但是每次我做更改都很麻烦。

是否有自动完成的方法?

一个类似/相同的问题已经在这里讨论过了:

运行旧版本的脚本,除非使用"sh scriptname">

您复制的是文件,而不是符号链接。要复制符号链接,告诉它到cp

cp --no-dereference link dest

但通常只是:

cp -d link dest
# or
cp -a link dest

/usr/local/bin中的链接添加到用户主目录~/bin中的位置看起来很奇怪。如果脚本是用户本地的,只需将~/bin添加到PATH,并将其放在那里。如果脚本是系统全局的,不要让脚本的两个位置有混淆的符号链接-考虑将脚本放在/usr/local/bin中。考虑研究GNU stow和chezmoi以及其他管理软件。

如果您移动了一个符号链接,则链接目的地不会更新。如果使用相对路径,移动的符号链接将被破坏。

例如:

cd /tmp
mkdir foobar
cd foobar
touch afile
ln -s ./afile symlink
cd ..
cp -a foobar/symlink .
ls -l symlink

输出
lrwxrwxrwx 1 user group 7 Aug  9 08:55 symlink -> ./afile

和"。/afile"当前目录中不存在

在我看来,在创建符号链接之前最好先cd到目标目录。

最新更新