rm
命令创建一个别名,以便在执行此命令后收到确认消息。所以我正在创建这样的别名alias rm='rm -i'
。但是据我所知,这是一个临时别名,它会一直存在,直到您关闭终端为止。这里要永久保存别名,我需要在终端中执行
~/.bash_aliases
或~/.bashrc
命令并添加我的别名那里。但是当我执行~/.bashrc
时,出现以下错误消息:bash: /home/bakhtiyor/.bashrc: Permission denied
当我运行
~/.bash_aliases
时,我还会收到另一条错误消息,例如:bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.
实际问题是什么,如何解决?
#1 楼
要创建别名,请将该别名永久添加到您的.bashrc
文件中gedit ~/.bashrc
,然后在底部添加您的别名。
现在在终端中执行
. ~/.bashrc
(在.
和~/.bashrc
之间应该有一个空格。现在您可以检查别名。
评论
@ karthick87,您写了“现在在终端中执行。〜/ .bashrc(。和〜/ .bashrc之间应该有一个空格。”。为什么需要此步骤?
–极客
2014年2月11日15:21
第一个'是什么。做。 〜/ .bashrc吗?
–禅
2014年7月16日下午4:13
@Geek @Zen“执行”不是正确的术语。点等效于源。用。 〜/ .bashrc,您可以获取bash。执行该文件将启动一个子进程,在该进程中执行命令,然后返回。在子进程中完成的所有操作均对父进程(执行执行的bash)没有影响。取而代之的是,源(带有点)的行为就像您在终端中写入文件的内容一样。这就是你想要的。 .bashrc每次您启动bash时都来源。如果您进行更改,则在您手动启动新的bash或源之前,它们将不适用。
–Gauthier
2014年10月3日,9:19
@ButtleButkus-可能只想更改一个用户的首选项,而不是整个系统。在Ubuntu中,系统范围的.bashrc文件是/etc/bash.bashrc
– WillC
16-10-26在3:30
@ShubhamA。查看此问题以了解OSX行为
–詹德森
18年5月7日在18:42
#2 楼
创建别名有很多方法。最常用的方法是:直接在您的
~/.bashrc
文件中添加别名例如:将这些行附加到
~/.bashrc
文件中alias ll='ls -l'
alias rm='rm -i'
下次(注销/登录或完成
. ~/.bashrc
)时,键入rm
时,将执行rm -i
命令。第二种方法可让您制作一个单独的别名文件,因此您不必将它们放在
.bashrc
中,而是放入您选择的文件中。首先,编辑您的~/.bashrc
文件并添加以下行(如果尚不存在),或者添加以下注释:if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
保存并关闭文件。之后,您要做的就是创建一个
~/.bash_aliases
文件,并在其中添加别名,并使用第一种方法中指定的格式。我的
~/.bash_aliases
文件的内容:alias cs='cd;ls'
评论
+1用于使用〜/ .bash_aliases。
–ændrük
2011年6月10日下午5:48
是的,使用另一个文件作为别名更干净,也可以在发行版之间移植。我之所以使用该文件,是因为某些别名是不够的,并且需要一个函数。因此,如果您使用文件代替该任务,则更加干净。我还有另一个别名-> alias aliases =“ xdg-open〜/ .bash_aliases &&来源〜/ .bash_aliases”,因此别名在保存时变得有用,如果您犯了一些错误,它将给您带来广告。
– m3nda
17年4月27日在12:08
在添加别名(例如别名ls ='ls -althr')后,某种方式给定的某些标记将不会生效,在这种情况下,-t标记不会生效。你知道为什么吗?
– Sajuuk
18-3-22在8:43
默认情况下,〜/ .bashrc包含〜/ .bash_aliases的内容,无需对其进行编辑。
– Jaakko
18年5月14日在9:49
并非总是〜/ .bashrc包含〜/ .bash_aliases的内容,就像我在Ubuntu终端Windows 10中一样,此解决方案非常方便。
–乔斯
18年5月30日在18:10
#3 楼
在我看来,您唯一的问题就是在无法执行时尝试执行.bashrc。但这不是正确的方法。每当您对此文件进行更改时,都应通过以下命令“执行”该文件:source ~/.bashrc
否则,它将简单地创建一个新的shell,在该文件中执行新外壳程序的环境,然后在退出时丢弃该环境,从而丢失您的更改。通过提供脚本,脚本将在当前shell中执行,因此它将保持有效。
我假设第二个错误是因为bash_aliases不存在。不需要这样做,只是建议您将更改分开并组织起来。它仅在存在的情况下使用,并且可以在.bashrc中查看它的测试:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
这表示如果〜/ .bash_aliases文件存在,则运行它。
评论
〜/ .bash_aliases更好。 askubuntu.com/questions/194111/…
–tomByrer
2014年7月8日在2:39
使用source命令使我的别名正常工作。 +1
– dspacejs
2015年12月2日,10:00
仅出于完整性考虑:在线上的初始点。 〜/ .bash_aliases具有与Shell内置命令源相同的含义。我认为这是正确的答案,解释了发生了什么。
–梅勒比乌斯
17-2-9在7:46
#4 楼
问题是您正在尝试执行一个非可执行文件:您可以使用以下命令进行检查:
ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc
请注意,没有“ x-可执行文件”第一列上的字母(文件权限)。
配置文件不是可执行文件,而不是执行它们,而是使用以下命令加载它们:
source /home/bakhtiyor/.bashrc
or
. /home/bakhtiyor/.bashrc
#5 楼
echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc
这是我正在寻找的示例,一种在终端(“ vps”)上键入几个字母以远程登录服务器并启用X11转发的方法,这样我就可以运行gui应用就像网络上的“ gedit”一样。
无论命令/别名命令如何,这种方式都带有echo语句,引号和用于将命令输出附加到文件(>>)的符号为我工作。只需将我的命令替换为所需的别名命令,然后将其输入到终端即可。
评论
这里的报价有点棘手。在此示例中,使用双引号是没有问题的,但是如果双引号中的文本包含美元符号,反斜杠等,则需要了解shell如何在双引号内处理它们。您可以在外部将单引号切换为内部并将双引号切换为内部,但是您仍然需要了解Bash如何处理别名定义中的双引号。
–tripleee
2015年11月30日下午6:04
#6 楼
我编写了此有用的函数来快速创建新别名,然后将别名定义写入~/.bash_aliases
(如果存在)或~/.bashrc
。提示:确保
~/.bash_aliases
存在并在~/.bashrc
中执行。# -----------------------------------
# Create a new permanent bash alias
#
# @param - name
# @param - definition
# -----------------------------------
new-alias () {
if [ -z "" ]; then
echo "alias name:" && read NAME
else
NAME=
fi
if alias $NAME 2 > /dev/null > /dev/null; then
echo "alias $NAME already exists - continue [y/n]?" && read YN
case $YN in
[Yy]* ) echo "okay, let's proceed.";;
[Nn]* ) return;;
* ) echo "invalid response." && return;;
esac
fi
if [ -z "" ]; then
echo "alias definition:" && read DEFINTION
else
DEFINTION=""
fi
if [ -f ~/.bash_aliases ]; then
echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
else
echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
fi
alias $NAME="$DEFINTION"
}
评论
好主意,但粗心使用此功能可能会导致别名命令的多个实例破坏.bashrc。您的功能肯定需要执行一些检查,以免造成混乱。
–Troublemaker-DV
16-3-31的1:04
这是有道理的。您是否有建议的解决方法,愿意分享@ Troublemaker-DV?
–blizzrdof77
18/12/26在21:02
不确定以后2 1 / 2yo是否仍然是实际的,但是...在1st时,我会grep RC以检查别名命令,如果已经在此处输入了该别名以避免重复。您对别名是否存在的检查还不够,因为RC可能已经被多个同名别名“污染”了。
–Troublemaker-DV
18/12/27在6:51
哈哈。您似乎像@ Troublemaker-DV!我会说这是一个愚蠢的假设,不太可能断言。
–blizzrdof77
6月21日21:19
#7 楼
如果您使用的是ruby,则可以使用rubygem安装。gem install aka2
用法
aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld" #add alias for lazy people
aka destroy hello #remove alias
aka d hello #remove alias for lazy people
rubygem将自动获取您的点文件,这样您就不会需要。看看这个。
#8 楼
我想扩展这个想法!您想根据自己的问题为命令添加别名:
echo "alias wolfr='cd /home/wolf'">>./~bashrc
现在您可以键入
wolfr
移至wolf的主目录。这非常相似,也很酷,导出命令:
echo "export ngse=/etc/nginx/sites-enabled"./~bashrc
现在您可以键入
cp $ngse/my_file /destination_directory/destination_filename
将文件从启用站点的目录复制到目标位置。在执行以下操作之前,这些操作均无效:
exec bash
或者,您可以重新登录或重新启动。
#9 楼
我建议使用/etc/bash.bashrc
您可以在该文件的末尾添加行。
alias ok="ping google.com"
每行添加别名后,您必须重新启动或重新登录。
评论
“我会建议..”,您为什么会建议呢?
–muru
2015年8月9日在4:17
除非您特别想为所有用户安装系统范围的设置,否则不要弄乱系统文件。在个人系统上,差异很小,但是在以后处理系统文件时比较麻烦,因此您可能仍应根据自己的喜好选择自己的个人点文件(这样可以更轻松地将设置复制到未来也是如此)。
–tripleee
15年11月30日在6:06
重启?这确实是一个可怕的建议,不要这样做,尤其是在本示例中/etc/bash.bashrc源满足您的所有要求时。但是应该使用〜/ .bashrc或〜/ .bash_aliases代替
– Xen2050
18年1月18日在12:50
@ Xen2050,我建议重新启动以显示重新启动/重新登录后可以正常工作。顺便说一句,即使另一个干净的终端窗口也将起作用。
–法哈德·阿罕默德(Fahad Ahammed)
18年1月19日在15:52
您可以在不重新启动的情况下升级到新内核,这不是旧的Windows ;-)
– Xen2050
18年1月19日在15:54
#10 楼
我记得,bashrc
曾经或曾经有行建议不要直接将其用于别名。解决方案是使用外部文件。已经添加了foo
和bar
别名,但是要添加baz
,必须“来源” bashrc
文件(或者,只需打开一个新的终端)。例如:thufir@dur:~$
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$
thufir@dur:~$ cat .bash_aliases
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'
thufir@dur:~$
thufir@dur:~$ source .bashrc
thufir@dur:~$
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$
thufir@dur:~$ baz
baz
thufir@dur:~$
现在,
baz
别名有效。我才刚刚意识到以前的回答已经提到了这种技术,但是他们掩埋了壁垒。#11 楼
我已经使用python为同一事物创建了一个自定义命令行工具在此处查看代码
评论
答案-stackoverflow.com/a/2622711/1487102别名rm ='rm -i'不能解决随意使用rm的问题