我可以编辑bash shell命令吗?


1

我只想修改bash shell命令(例如exit),所以当我在终端中写入exit时,它将清除屏幕,并回显一些文本,等待2秒钟,然后执行exit功能。
那么,有什么办法可以在Ubuntu上修改shell命令,如果可以的话?

Answers:


4

您可以使用外壳别名

alias exit='clear; sleep 2; exit'

要使其永久,请将别名添加到〜/ .bashrc文件的底部。看到这个线程寻求帮助


这不是要覆盖原始的退出命令吗?我的意思是使exit ='sleep 2; 退出'bash不会知道第二个出口,并且终端将不执行退出功能。(我先问这个,然后发现它不起作用)
Black Block

3
@Naruto否,这不应该发生:实际上,您可能已经在默认~/.bashrc文件中定义了几个这样的别名,例如alias ls='ls --color=auto'and alias grep='grep --color=auto'(键入alias不带任何参数的当前列表)。
steeldriver

@Naruto-这里的问题是exit内置的bash- 对于常规命令,如果您希望它执行类似的操作,则可能会输入命令的完整路径(例如alias firefox='clear; sleep 2; /usr/bin/firefox')。以上可能仍然可以工作:)。exit可能的替代方法是,类似于kill -SIGINT $$kill -SIGKILL $$杀死进程的PID(SIGKILL可以正常运行,但不能干净退出,其他内容似乎被终端忽略-信号处的内容:en.wikipedia.org/wiki/ Unix_signal
维尔夫

我可以还原此命令以恢复原来的退出命令,也可以按照您在此处回答的相同方式做出另一个命令吗(别名exit2 ='clear; sleep 2; exit')或如何执行此操作?
黑块

您可以使用unalias例如命令在当前外壳中将其反转unalias exit。您可以在命令前面加上反斜杠(即)来执行原始命令而不会造成混淆\exit
steeldriver 2015年

1

我发现了一种解决方法,而不是编辑exit bash命令,方法
trap 'clear; ~/ascii3.sh; spd-say "Exit"; sleep 2' EXIT 是使用终端的出口陷阱,并将其放在.pashrc文件的末尾,并且可以正常工作。
和ascii3.sh:

回声-e“ \ 033 [01; 31m”
回声“ _ _ __ _ _ ____ __ __ _ __ ____ ____ ____ __ _ _ _”
回声“ /)(\ / _ \ /)(\(__)/ _ \((\(// __)(__)(\ / _ \(\ /)/ \”
回声“)__(/ \\\ \ / /)_)/ \ //)((((__)_))D(/ \)/ \ _ /”
回声“ \ _)(_ / \ _ / \ _ / \ __ /(____)\ _ / \ _ / \ _)__)(__)\ ___)(____)(____ / \ _ / \ _ /( __ /(_)“

我认为我提出的问题是一个非常糟糕的问题,因为它没有反映出我的想法,但是我不会改变它,答案也不会随我便问。


0

您不能轻易修改命令,但是可以替换命令。

# You only need this one time:
mkdir --mode=755 $HOME/bin  

# You need this command once per login (or in $HOME/.bashrc)
PATH="$HOME/bin:$PATH"  

然后,其中的任何可执行文件/脚本$HOME/bin将覆盖具有相同名称的任何命令。

键入命令时,外壳程序会在中的每个目录中按该名称查找可执行文件$PATH

不幸的是,您的示例exit是“内置的Shell”(请参阅​​参考资料man bash),并没有找到$PATH它,而是由Shell内部处理的。要覆盖,exit您必须在您的程序中定义一个shell函数或别名(请参阅参考资料man bash$HOME/.bashrc

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.