Function 将cd重新定义为;cd<;目录>;ls-F";问题

Function 将cd重新定义为;cd<;目录>;ls-F";问题,function,user-input,ls,cd,Function,User Input,Ls,Cd,在我的.bash_档案中,我有 cd(){ builtin cd $1 ls -F } 将cd更改为cd ls-F。这似乎在大多数情况下都有效,但当我想将cd更改为多字目录时,它不起作用。它认为这两个词是两个独立的输入。为了解决这个问题,我还尝试了: cd "word1 word2" cd "word1\ word2" dir=$"word1 word2" cd "$dir" 而这些都不起作用。我需要修改cd功能吗?还是我忽略了一个聪明的输入法?这正是(我认为)你想要的: cd() {

在我的.bash_档案中,我有

cd(){ builtin cd $1 ls -F }
将cd更改为cd ls-F。这似乎在大多数情况下都有效,但当我想将cd更改为多字目录时,它不起作用。它认为这两个词是两个独立的输入。为了解决这个问题,我还尝试了:

cd "word1 word2"
cd "word1\ word2"

dir=$"word1 word2"
cd "$dir"
而这些都不起作用。我需要修改cd功能吗?还是我忽略了一个聪明的输入法?

这正是(我认为)你想要的:

cd() {
  builtin cd "${1-$(echo ~)}" && ls -F
}
请注意以下几点:

  • 该变量被引用,因此
    cd'some dir with spaces'
    将起作用

  • cd
    ls
    之间有一个
    &&
    ,这样,如果前者失败,后者就不会发生。(它们可能只是在不同的行上,但是即使
    cd
    失败,
    cd
    的失败消息也会在
    ls
    的输出中“丢失”。(不确定命令在同一行上应该如何工作。)

  • $1
    默认设置为
    ~
    ,以便只
    cd
    按预期工作


不幸的是,它仍然在做同样的事情:
dir=$“word1 word2”cd“$dir”
返回:
bash:cd:word1:没有这样的文件或目录
cd“$1”
ls-F
之间还需要分号或换行符。。。尝试
cd“somewhere-else”ls-F
没有意义,因为
cd
只接受一个参数。@gdavt或删除该
$
dir=“word1 word2”
cd“$dir”
对我来说很好。