bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

completion inconsistencies if cwd contains symlinks


From: Kartik K. Agaram
Subject: completion inconsistencies if cwd contains symlinks
Date: Tue, 5 Sep 2006 21:15:14 -0500 (CDT)

[Resending for third time.]

Configuration Information [Automatically generated, do not change]:
Machine: i686
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='i686' 
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i686-pc-linux-gnu' 
-DCONF_VENDOR='pc' 
-DLOCALEDIR='/var/local/akkartik/bash-3.1/install/share/locale' 
-DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib -g -O2
uname output: Linux lutie.cs.utexas.edu 2.6.17.4 #1 SMP Wed Jul 12 14:41:00 CDT 2006 i686 GNU/Linux
Machine Type: i686-pc-linux-gnu

Bash Version: 3.1
Patch Level: 17
Release Status: release

Description:
  If any part of cwd is a symlink, file completion when you try to navigate
  above that part follows the logical path. This is in conflict with all
  coreutils commands that use the physical path.

  ---

  In an ideal world I think bash's completion makes more sense than coreutils
  semantics. But after looking into coreutils sources and ext2 documentation
  
(http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.11.tar.bz:Documentation/filesystems/ext2.txt
  or http://www.mjmwired.net/kernel/Documentation/filesystems/ext2.txt)
  I conclude that the 'logical path' is maintained only by the shell, not in
  the filesystem. If I'm right, then the whole notion of logical path is a
  leaky abstraction honored only by 'cd -L' [anybody else?]. I would
  really like to be told I'm wrong.

Repeat-By:
  $ mkdir base_dir
  $ cd base_dir
  $ mkdir -p x/y
  $ ln -s x/y f
  $ cd f
  $ ls ..
  y
  ##### Testing out tab-completion
  $ ls ../<Tab>
  f  x

  ##### stat("../f") returns ENOENT.
  $ cat > x.c
  #include<stdio.h>
  #include<sys/stat.h>
  #include<errno.h>

  struct stat buf ;

  int main () {
      printf ("%d %d\n", stat("../f", &buf), errno);
  }
  $ gcc x.c
  $ a.out
  -1 2

Kartik




reply via email to

[Prev in Thread] Current Thread [Next in Thread]