我可以修改终端命令来做其他事情吗?


8

我研究过别名,函数...但是我还没有提出令人满意的东西。让我给您几个场景:

  • 在我cd进入文件夹的95%的时间内,我都会ls 执行命令。
  • mkdircd自己90%的时间都投入其中。

你明白了。

将这些命令绑定在一起(或其他功能)的“最干净”方法是什么?


5
为什么别名不适合您?
托尔比约恩Ravn的安徒生

2
那么mkdir的cd结果是否应该加在ls上?
bmike

@bmike好吧,新创建的目录将为空,因此ls不输出任何内容。
2015年

@ Random832您假定ls上没有标志,但更重要的是我的问题将揭示希望进行更改的情况如何。我更喜欢别名而不是函数,但是两者都可以尝试询问。
bmike

1
@ fd0我毫不怀疑别名不起作用。我在问为什么。可能有一个更简单的解决方案。
托尔比约恩Ravn的安徒生

Answers:


4

你可以把这些线在你.zsrhc.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

结果->

在此处输入图片说明

这个答案的解释:

在我的.bashrc的早期,我有:[-z“ $ PS1”] && return,该行之后的所有内容仅适用于交互式会话,因此这不会影响cd在脚本中的行为。

此评论的更多信息:

[-z“ $ PS1”]检查$ PS(交互式提示变量)是否为“零长度”(-z)。如果长度为零,则表示尚未设置,因此Bash不能在交互模式下运行。在这种情况下,此时&&返回部分从.bashrc源中退出。

顺便说一句,谢谢你的问题,这真的很酷:)

编辑:

另一个解决方案是将ls集成到提示中。我确定您可以使用OhMyZsh来做到这一点;)


1
通常,不要使用与cd ls rm等标准命令相同的名称,因为您将需要使用这些标准命令
user151019 2015年

@Mark我同意'rm -rf〜/ *'^^但是对于cd命令,这并不是很危险。而且Carles想要“升级现有命令”,所以……
StrawHara 2015年

我不得不说,自@StrawHara发布以来,我就一直使用此解决方案,但我遇到了0个问题。我想提供“进展如何” :)真的很有用;这就是我的使用方式(.zshrc
Carles Alcolea,

13

我倾向于为此发出新命令。我认为将它们合并为一个甚至更合乎逻辑。

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

我喜欢您将这些结合起来的想法!:-)
Martin Allert

5
这个答案也是最干净的,因为它不会干扰脚本使用时cd / mkdir的默认定义
holroy 2015年

1
当然可以,但是如果您决定开始使用Go编程语言该怎么办?:P
arxanas 2015年

@arxanas:您使用makefiles吗?;-)
DevSolar 2015年

2
嗯,我喜欢这个。但是如果您不小心输入了错误的名称,则会创建一个新目录。它是很难落实休假(CD支票/.... ../什么的),并删除该目录,如果它是空的?我的意思是,如果您离开目录,只需检查它是否为空,如果是,则将其删除。如果您不希望这样做,仍然可以使用cd代替go
Schwertspize 2015年

6

我试图将类似这些的东西添加到我的.bashrc

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

但是,我发现这会弄乱使用覆盖命令的脚本,并且选项处理可能很脆弱(例如,如果您想传递-p给上述mkdir命令,它也会传递给cd)。更好的办法是使用不同的名称(例如cmcd)来定义别名。


1
[ -z "$PS1" ] && return在这些功能之前,在文件末尾插入应该会有所帮助
Carles Alcolea

5

我认为功能是要走的路。就像是

chglist() {
    cd "$1" && ls
}

举个例子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.