我到处搜索,几乎每个人都建议打开~/.bashrcor ~/.bash_aliases,然后将别名命令放在那里,我创建了一个函数名palias作为永久别名函数并将其放入~/.bashrc:
function palias(){ echo "alias $1='$2'" >> /home/User/.bashrc;}
Run Code Online (Sandbox Code Playgroud)
所以现在如果我想永久别名一些命令,我只是:
palias update "sudo apt-get update"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有像这个函数这样的内置命令,或者像这样的东西可以从存储库安装?
使用终端时,按上下循环按时间顺序输入以前的命令是正常的。
我从一个站点学到了如何通过在向上和向下按下时根据先前输入的命令自动完成我在光标处键入的内容来添加该行为。
例如,假设我按此顺序键入以下命令:
ls Videosls Vidslsomethingls Videos/Funny/Oldvi filels Music如果我没有输入任何内容,按上下键会像往常一样循环显示所有行。但是,如果我输入ls了 ,则上下按会循环显示前 2 个字符所在的所有命令ls(上面的第1、2、3、4、6 行)。但是输入ls(后面有一个空格)只会让上下循环通过第 1、2、4、6 行。类似地,ls Vid让箭头在第 1、2、4ls Videos行循环,但只允许在第 1 行和第 4 行之间循环。
完成特定于您需要一遍又一遍输入的命令的值非常有用,而不必循环浏览您在它们之间输入的每个不相关的命令。例如,我试图测试env诸如语言环境之类的值对事物的影响:
env [many different values] [command]
[insert many different commands here]
env [slightly different values from before] [command]
[doing other stuff]
Run Code Online (Sandbox Code Playgroud)
我只需要在键入后按几次即可在env我尝试过的值之间循环。
如果描述的方式有点长,我深表歉意。我不知道它叫什么。我的终端曾经有这种行为,但他们似乎已经失去了它,我找不到我从中学到的网站。我认为这与编辑有关~/.bashrc。
我有一个当前的 /home/user/ 目录 ~ 但我想将其更改为 /user/home/
/user/home 已经存在。
使用选项usermod不起作用,因为我无法以 root 或其他用户身份访问系统。
我正在寻求修改一些 .bashrc 文件和更改一些环境变量或类似的解决方案。我通过 ssh 登录。
我正在运行 Ubuntu 14.04。
先感谢您
不幸的是,以下解决方案不适用于我的情况:
编辑
我想我会在这里提供更多信息而不是回复评论。
目前文件夹结构比我上面的例子奇怪很多,但它的基本原理是一样的。即目前当我这样做时:
user@local:~$ ssh user@host
Run Code Online (Sandbox Code Playgroud)
我最终在:
user@host:~$
user@host:~$ pwd
/path/of/current/home/
Run Code Online (Sandbox Code Playgroud)
所以当我使用标签之类pip的--user东西时,它会在本地安装东西。
因为有一些内存限制以及ssh写入该位置的问题(一段时间后我无法再写入),我希望有以下行为:
user@local:~$ ssh user@host
user@host:~$
user@host:~$ pwd
/path/of/new/home/
Run Code Online (Sandbox Code Playgroud)
/path/of/new/home/ 已经存在并且没有上面设置的限制。
我想在 Ubuntu 中给我的终端提示一个更个性化的外观,并想在编写命令时更改 '$' 之前的文本。
从我发现这是通过编辑主目录中的 .bashrc 文件来完成的,所以我进入那里并进行了更改
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
Run Code Online (Sandbox Code Playgroud)
到
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='\e[1;32m[\W]\$ \e[m'
fi
Run Code Online (Sandbox Code Playgroud)
这有效,终端看起来像我想要的那样。
但是一段时间后,当我使用向上箭头键进入命令历史时输入几个命令时,事情变得很奇怪。
从干净的线条开始并按向上箭头键是有效的。再次按下时,该行上的文本将被限制在大约 15 个字符,并且历史记录中的新命令(应该显示)在开始时被几个字符限制,并且它们合并在一起在命令行上。
例如我最近的两个命令是
Java Test4 words-250.txt words-250-in.txt
Javac Test4.java
Run Code Online (Sandbox Code Playgroud)
按一次向上箭头键时,将显示第一行。再次按下时,显示:
Java Test4 worc Test4.java
Run Code Online (Sandbox Code Playgroud)
尽管有这个奇怪的输出,终端工作正常。例如,如果我在执行上述操作后按 Enter,Javac Test4.java 将运行。如果我尝试使用退格键删除整行,我只能删除直到该行显示
Java Test4
Run Code Online (Sandbox Code Playgroud)
如果在此之后按回车,我会得到一个新的空行,就像按回车时该行是空的一样。
如果我重置 .bashrc 文件,所有这些都会消失。
为什么会发生这种情况,我该如何解决?
我想在 Ubuntu 中通过简单的命令在当前位置打开新的终端窗口
gnome-terminal --working-directory=`pwd` & disown
Run Code Online (Sandbox Code Playgroud)
工作对我来说很好。但是当我给 bashrc 加上别名时
alias clone="gnome-terminal --working-directory=`pwd` & disown "
Run Code Online (Sandbox Code Playgroud)
pwd开始计算。所以我得到了类似的东西。
$ type clone
clone is aliased to `gnome-terminal --working-directory=/home/user & disown '
Run Code Online (Sandbox Code Playgroud)
是否可以pwd仅在我调用别名时进行计算。或者我需要编写除别名之外的 bash 函数?
我已经在这个论坛上其他人的帮助下编辑了我的 .bashrc 看起来像这样......感谢大家对这个脚本的天气部分的帮助......
我遇到的一个问题是外部 IP 地址的代码。如果出于某种原因,我用来检查外部 IP 的站点没有响应……它会在那时锁定我的 bash,直到它获得信息。
我想做的是改变它,这样我就可以拥有它,如果它在一秒钟或 500 毫秒内没有响应......然后继续前进,这样它就不会挂起。我希望这是有道理的..这是我正在使用的代码。
localnet()
{
declare -a INETARRAY
INETARRAY=( `/sbin/ifconfig | awk /'inet addr/ {print $2}' && /sbin/ifconfig | awk /'Bcast/ {print $3}'`)
echo -ne ${INETARRAY[@]} "ExtIP:" ; myip
}
myip ()
{
lynx -dump -hiddenlinks=ignore -nolist http://checkip.dyndns.org:8245/ | grep "Current IP Address" | cut -d":" -f2 | cut -d" " -f2
}
Run Code Online (Sandbox Code Playgroud)
基本上我需要一个 if 语句来做这样的事情:
如果站点没有在可配置的时间负载“第 1 行”的情况下提供预期内容,则加载“第 2 行”
第 1 行将包含没有外部 IP 请求的代码 第 2 行将包含具有外部 IP 请求的代码。 …
我似乎无法让它在 Ubuntu 中工作,它应该是一个简单的答案,也许有人可以帮助我。我想要做的就是让 sudoers 使用他们自己的历史文件,但是如果我在.bashrcfor root 中设置历史变量:
HISTFILE="/root/.bash_history.$SUDO_USER"
Run Code Online (Sandbox Code Playgroud)
似乎什么也没有发生。
我已尝试使用上述条目更改/root/.bashrc和/etc/skel/.bashrc。没有。我以前在 CentOS 中使用过这个(请参阅make sudoers 使用他们自己的历史文件)。
我什至将条目移到文件的开头,因为我发现一些建议表明它可能会在某一点后被忽略,但无论位置如何,都不会创建历史文件。如果我使用我的箭头键,但是历史条目在那里......它们来自哪里我已经不知道了,这似乎是某种魔法,似乎是巫毒教。
任何帮助,将不胜感激。
我有两个文件。file1是可执行的,file2只是一个文本文件,我经常使用它们,但我cd每次都必须这样做才能到达目录。
如何file1在终端中通用可执行以及如何访问内容而file2不管我在终端中的位置。是否可以添加file2in 的内容,man page以便我可以只做man file2.
我认为这可以使用/etc/environment但我想知道这样做的正确方法。
我注意到在新的 Ubuntu 16.04 安装中,我的 root 用户的 .bashrc 的行为与我刚刚在同一个盒子上创建的新用户的行为略有不同。
据我所知,root用户的.bashrc文件来自base-files包:http : //packages.ubuntu.com/xenial/base-files
/etc/skel 文件由bash根据恢复 /etc/skel 文件提供
有什么不同的原因吗?
几年前,我进行了从 14.04 到 16.04 的自动分发更新。我有生以来第一次能够在自动分发更新后继续使用计算机。像往常一样,软件存储库都经过监控,因此系统更新无法正常工作,但我已经熬过去了。
但是,我将进行 18.04 的全新安装。为了能够在安装后更轻松地配置我的系统,我将我的命令历史导出到一个文本文件。
$ history > /.../20180915_Command_history.txt
Run Code Online (Sandbox Code Playgroud)
漂亮的是,生成的文本文件包含行号。有点神秘,第一行号是76,看了前几行,好像有一些以前的命令。