我在文件夹~/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到目标目录。