source não está lendo corretamente o symlink?

1

Meu arquivo .bashrc é um link simbólico para ~/Scripts/rc/bashrc . Isso funciona bem para mim e tem sido há anos.

No entanto, a partir de hoje, é isso que estou vendo:

bash-4.3$ source .bashrc
bash: source: .bashrc: file not found
bash-4.3$ ls -la .bashrc
lrwxrwxrwx 1 jonas jonas 17 Oct 28 12:31 .bashrc -> Scripts/rc/bashrc
bash-4.3$ source Scripts/rc/bashrc 
jonas@jonas-xps:~$

Eu realmente não consigo entender isso. Por que de repente pararia de funcionar? Estou usando o Utopic em um laptop Dell amd64.

Alguma saída de depuração:

bash-4.3$ stat .bashrc
  File: ‘.bashrc’ -> ‘Scripts/rc/bashrc’
  Size: 17          Blocks: 8          IO Block: 4096   symbolic link
Device: 22h/34d Inode: 10880136    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1001/   jonas)   Gid: ( 1001/   jonas)
Access: 2014-10-28 12:31:57.076868217 +0100
Modify: 2014-10-28 12:31:57.076868217 +0100
Change: 2014-10-28 12:31:57.076868217 +0100
 Birth: -

bash-4.3$ stat Scripts/rc/bashrc
  File: ‘Scripts/rc/bashrc’
  Size: 4019        Blocks: 24         IO Block: 4096   regular file
Device: 22h/34d Inode: 11146383    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/   jonas)   Gid: ( 1001/   jonas)
Access: 2014-10-28 12:29:53.352871873 +0100
Modify: 2014-05-27 12:43:09.470849817 +0200
Change: 2014-05-27 12:43:09.470849817 +0200
 Birth: -

bash-4.3$ readlink -e .bashrc
/home/jonas/Scripts/rc/bashrc
    
por Jonas G. Drange 28.10.2014 / 12:39

1 resposta

3

Se o nome do arquivo não contiver um / , o comando interno source poderá procurar o nome no PATH , dependendo de algumas opções do shell. Então, em vez de source .bashrc ,

'source ./.bashrc'

deve fazer o que quiser.

De man bash :

     .  filename [arguments]
    source filename [arguments]
           Read  and  execute  commands from filename in the current shell
           environment and return the exit status of the last command exe‐
           cuted  from  filename.   If  filename does not contain a slash,
           filenames in PATH are used to  find  the  directory  containing
           filename.   The  file  searched  for  in  PATH need not be exe‐
           cutable.  When bash is not in posix mode, the current directory
           is  searched  if  no  file is found in PATH.  If the sourcepath
           option to the shopt builtin command is turned off, the PATH  is
           not  searched.
    
por Volker Siegel 28.10.2014 / 12:49