【问题标题】:Re define cd to "cd <directory> ls -F" problems重新定义 cd 到 "cd <directory> ls -F" 的问题
【发布时间】:2014-10-20 06:27:56
【问题描述】:

在我的 .bash_profile 中,我有

cd(){ builtin cd $1 ls -F }

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

cd "word1 word2"
cd "word1\ word2"

dir=$"word1 word2"
cd "$dir"

这些都没有奏效。我需要修改我的 cd 功能吗?还是我只是忽略了一个聪明的输入法?

【问题讨论】:

  • 不幸的是,它仍然在做同样的事情:dir=$"word1 word2" cd "$dir" 返回:bash: cd: word1: No such file or directory
  • 您还需要在cd "$1"ls -F 之间使用分号或换行符...尝试cd "some where else" ls -F 并没有真正意义,因为cd 只需要一个参数。
  • @gdavtor 删除 $dir="word1 word2", cd "$dir" 对我来说很好用。

标签: function user-input ls cd


【解决方案1】:

这做(我认为)你想要的:

cd() {
  builtin cd "${1-$(echo ~)}" && ls -F
}

注意几点:

  • 引用变量,以便cd 'some dir with spaces' 起作用。

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

  • $1 默认为 ~,因此只有 cd 可以按预期工作。

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多