我在 gnome-terminal 的首选项中选择了“替换初始标题”设置,但它只显示默认标题“终端”。阅读此答案后,我将其添加到我的.bashrc:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
Run Code Online (Sandbox Code Playgroud)
并注释掉了这一行:
#PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Run Code Online (Sandbox Code Playgroud)
重新启动终端后,它开始显示user@hostname: ~/currentdir在其标题中,每当我cd转到另一个目录时就将其更改。但是当我启动像cmusand 之类的 CLI 程序时它仍然没有改变vim(例如,vim 将当前文件名设置为标题)。
我已经安装rxvt,一切正常。
Ubuntu 13.04,gnome 终端 3.6.1。
我的 .bashrc - 几乎与默认 ubuntu 安装附带的相同。

我正在尝试将我的路径变量设置为如下所示:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jgrande/android-sdk-linux/platform-tools:/usr/lib/jvm/java-7-openjdk-amd64/bin/:/usr/lib/jvm/java-7-openjdk-amd64/jre/bin
Run Code Online (Sandbox Code Playgroud)
并且出于某些原因,无论我编辑什么文件,该变量总是看起来像这样(java 路径重复了很多次):
PATH=/usr/local/java/jdk1.7.0_79/bin:/home/jgrande/bin:/usr/local/java/jdk1.7.0_79/bin:/home/jgrande/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1.7.0_79/bin:/usr/local/java/jdk1.7.0_79/jre/bin:/usr/local/java/jdk1.7.0_79/bin:/usr/local/java/jdk1.7.0_79/jre/bin
Run Code Online (Sandbox Code Playgroud)
我试图编辑我的个人.bashrc和.profile以及/etc/environment,/etc/bash.bashrc,/etc/profile,并将其设置/etc/profile.d。现在,有jdk.sh在/etc/profile.d其中PATH变量是相同的不正确的一个I张贴以上。但是,我试图注释掉该行甚至jdk.sh完全删除,但仍然没有解决。
否则,我已经注意到,如果我以另一个用户身份登录,我将拥有正确的 PATH 变量,并且不会让 java 重复一堆乱七八糟的变量。
所以,我想知道,我还没有检查过的 PATH 变量还能在哪里定义?
尝试修改时/etc/bash.bashrc出现错误:
$ echo "my edit" >> /etc/bash.bashrc
bash: /etc/bash.bashrc: Permission denied
Run Code Online (Sandbox Code Playgroud)
ls -ll /etc/bash.bashrc 显示:
-rw-r--r-- 1 root root 1975 2011-05-18 19:54 /etc/bash.bashrc
Run Code Online (Sandbox Code Playgroud)
我怎么能修改/etc/bash.bashrc?
我已经使用 Linux 超过 6 个月了,但从来没有过多地使用 CLI(命令行界面或终端或 shell)
现在,当我在这里提问、获得答案或从其他站点获得帮助时,我学习了新命令...
如何将每个新命令存储在文本文件中?只有新的/独特的命令,而不是相同命令的重复。
下面是一个例子:
$ command1
$ command2
$ command3
$ command4
$ command1Run Code Online (Sandbox Code Playgroud)
commandrec就像这样command1
command2
command3
command4Run Code Online (Sandbox Code Playgroud)
注意: 终端中再次出现的最后一个命令command1不会再次记录/保存在文本文件中。
下次我打开终端并输入新命令时command 5,它应该附加到列表中commandrec
(但如果该命令在其他日期较早使用过,则仍应忽略它。例如,在新的日期/时间command 1再次输入但未记录为已使用)command 5command1
commandrec文件将看起来像这样31/05/12 12:00:00
command1
command2
command3
command4
01/06/12 13:00:00
command 5Run Code Online (Sandbox Code Playgroud)
(如果可能的话,时间和日期的事情会很棒,但即使不存在也没关系)
这样,我可以记录我迄今为止使用的所有命令。
如何才能做到这一点?
当我尝试在同一终端中第二次运行 .bashrc 中定义的 bash 函数时,它不起作用。
代码如下:
function nos (){
local option
while getopts cs option
do
case $option in
s)
#start my server
;;
c)
local cdir="~/mydirectory"
local cdir_arg=""
case $OPTARG in
p)
local cdir_arg="anotherdirectory"
;;
esac
local cdir="${cdir}${cdir_arg}"
cd $cdir
;;
*)
echo 'This function doesnt have Super Cow Powers'
return 1
;;
esac
done
}
Run Code Online (Sandbox Code Playgroud)
我运行这个:
nos -c
Run Code Online (Sandbox Code Playgroud)
它转到 ~/mydirectory
好的,工作了。
但后来我这样做:
cd ~
nos -c
Run Code Online (Sandbox Code Playgroud)
什么也没有发生。
我试图在我的提示中集成当前的 git 分支,但它没有按预期运行。我在 ubuntu 16.04 和 git 2.7.4 上使用 bash。当我启动终端时,没有显示任何 git。如果我.bashrc从存储库内部获取我的分支,则会显示分支,但不再更新。这是我在 .bashrc 中写的:
green="\[\033[01;32m\]"
blue="\[\033[01;34m\]"
no_color="\[\033[00m\]"
purple="\[\033[01;35m\]"
source ~/.git-prompt.sh
export PS1="$purple\u $green$(__git_ps1 " (%s)") $blue\W $no_color \$ "
Run Code Online (Sandbox Code Playgroud)
我尝试按照git-prompt 中的说明进行操作,但结果仍然相同。但是,如果我只是从 git-prompt 复制建议:PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '它有效,但当然看起来不像我想要的。我遗漏了一些语法错误吗?即使不使用导出,模板 PS1 也能工作,只是PS1=...
在我的 16.04 安装中,我把它放在我的~/.bashrc文件中:
#Show git branch in commandline
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u:\[\033[01;34m\]\w\[\033[00m\]\$(parse_git_branch)\[\033[00m\] $ "
Run Code Online (Sandbox Code Playgroud)
它显示了这样的提示:
user:~/myrepo (master) $
Run Code Online (Sandbox Code Playgroud)
但是当我在 18.04 上做同样的事情时,提示看起来像这样:
user:~/myrepo $
Run Code Online (Sandbox Code Playgroud)
我如何让它在 18.04 中工作?
$ printf "%q\n" "$PS1" "$PROMPT_COMMAND" "$0" "$SHELL"
\\\[\\033\[01\;32m\\\]\\u:\\\[\\033\[01\;34m\\\]\\w\\\[\\033\[00m\\\]\$\(parse_git_branch\)\\\[\\033\[00m\\\]\ \$\
''
bash
/bin/bash
Run Code Online (Sandbox Code Playgroud)
我正在使用sed (GNU sed) 4.4和GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)。这是一个“全新”安装,因此.bashrc.
当我通过单击其图标打开 WSL 时,我需要在某个目录(当然比 更有用的目录)中打开它System32,因此我cd destination在.bashrc. 但是然后“在此处打开 Linux Shell”选项(当您按住Shift键盘上的键并右键单击任何文件夹时可用)也被重定向到该目的地,这是不可取的。有没有办法可以在我的.bashrc脚本中检测到这种情况让它表现得像它应该的那样?
简而言之,我需要知道何时通过文件夹内的Shift+右键单击中的选项打开外壳,这样我就可以避免将工作目录更改为另一个目录。
我正在使用WSL-Ubuntu 18.04 LTS和GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)。
我了解交互式登录和交互式非登录之间的区别
\n根据这篇优秀的文章:Zsh/Bash 启动文件加载顺序(.bashrc、.zshrc 等),我们有下表
\n+----------------+-----------+-----------+------+\n| |Interactive|Interactive|Script|\n| |login |non-login | |\n+----------------+-----------+-----------+------+\n|/etc/profile | A | | |\n+----------------+-----------+-----------+------+\n|/etc/bash.bashrc| | A | |\n+----------------+-----------+-----------+------+\n|~/.bashrc | | B | |\n+----------------+-----------+-----------+------+\n|~/.bash_profile | B1 | | |\n+----------------+-----------+-----------+------+\n|~/.bash_login | B2 | | |\n+----------------+-----------+-----------+------+\n|~/.profile | B3 | | |\n+----------------+-----------+-----------+------+\n|BASH_ENV | | | A |\n+----------------+-----------+-----------+------+\n| | | | |\n+----------------+-----------+-----------+------+\n| | | | |\n+----------------+-----------+-----------+------+\n|~/.bash_logout | C | | |\n+----------------+-----------+-----------+------+\nRun Code Online (Sandbox Code Playgroud)\n第一个链接引用了另一篇优秀的文章:清理 bash 自定义,其中提供了有关交互式登录和交互式非登录的出色解释,如下所示:
\n\n交互式登录shell 是您正在输入的 …