标签: bashrc

~/.bashrc 不是来自新的 lxterminal 窗口

我在 ~/.bashrc 中添加了一些行,例如

export JAVA_HOME=/opt/jdk1.6.0_22
Run Code Online (Sandbox Code Playgroud)

我来源:

$ source ~/.bashrc
$ env | grep 'JAVA'
JAVA_HOME=/opt/jdk1.6.0_22
Run Code Online (Sandbox Code Playgroud)

然后我在我家中名为 scripts 的文件夹下创建了一个基本的 bash 脚本:

#!/bin/bash

echo 'start'
echo $(env | grep HOME)
echo $(env | grep LOGNAME)
echo $(env | grep JAVA)
echo 'exiting'

sleep 5
exit
Run Code Online (Sandbox Code Playgroud)

现在,如果我直接启动它,我会得到预期的输出

$ cd ~/scripts
$ bash 'myScript.sh'
start
HOME=/home/foo/.config
LOGNAME=foo
JAVA_HOME=/opt/jdk1.6.0_22
exiting
Run Code Online (Sandbox Code Playgroud)

但是,我需要使用以下命令以不同的方式调用它,不幸的是它不能以相同的方式工作:

$ lxterminal --command "bash /home/foo/scripts/myScript.sh"
start
HOME=/home/foo XDG_CONFIG_HOME=/home/foo/.config
LOGNAME=foo

exiting
Run Code Online (Sandbox Code Playgroud)

似乎 .bashrc 不是以这种方式获得的。我也尝试过 .profile ,但结果相同。使用上述命令调用时,是否有另一个由 lxterminal 提供的文件?

我需要这个命令的原因是因为我想通过添加到开始菜单的链接/启动器启动这些我自己的脚本,并且它们必须在 lxterminal 窗口上执行。

bash environment-variables bashrc

3
推荐指数
1
解决办法
2025
查看次数

根据 shell 在 .bashrc 中设置 PATH

我有一个switcher有不同用例的用户。这PATH应该取决于当前 shell 是否受到限制。因此我在末尾添加了/home/switcher/.bashrc

[[ $- == *r* ]] && PATH='' && echo 'restricted' || echo 'unrestricted' 
Run Code Online (Sandbox Code Playgroud)

但切换用户时却无法按预期工作:

root@host:~$ sudo -u switcher rbash
unrestricted
switcher@host:~$ echo $PATH
/home/switcher/bin:/usr/local/bin:/usr/bin:/bin
switcher@host:~$ echo $- $SHELL
himrBHs /usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

这告诉我,这.bashrc实际上是被处决的,但显然是在外面rbash。我在这里缺少什么?我需要更改什么以便PATH=''在执行时设置rbash而不是在中设置bash

请注意,不幸的是,对于不同的用例使用不同的用户对我来说不是一个选择。

linux bash path bashrc

3
推荐指数
1
解决办法
444
查看次数

为什么.bashrc前面有一个点

我一直试图弄清楚这一点,对于一些我只能猜测的非常简单的问题,但为什么前面有一个“点” .bashrc

linux bashrc

2
推荐指数
1
解决办法
443
查看次数

通过 bash 为 OS X 中的应用程序设置别名的正确方法是什么?

在 my 中~/.bashrc,我有几个别名,例如:

alias emacs='/Applications/Aquamacs.app/Contents/MacOS/Aquamacs'
alias octave='/Applications/Octave.app/Contents/Resources/bin/octave'
alias wine='/Applications/Wine.app/Contents/Resources/bin/wine'
alias simion='wine "/Users/hpek/.wine/drive_c/Program Files/SIMION 8.0/simion.exe"'
alias inkscape='wine "/Users/hpek/.wine/drive_c/Program Files/Inkscape/inkscape.exe"'
Run Code Online (Sandbox Code Playgroud)

我不认为这是正确的做法。别名在 bash 脚本中不起作用,并且当通过brew或安装某些东西时apt-get,它不会创建这样的别名。

这样做的正确方法是什么?

bash alias bashrc

2
推荐指数
1
解决办法
1万
查看次数

无论我在哪台机器上工作,我怎样才能使我的配置可用?

我创建了一个自定义的.vimrc,并.bashrc在我的本地机器。
另外我有几个vim我觉得有用的插件。现在我ssh远程服务器工作非常频繁。但是每次为了工作,我都需要花费/浪费一些时间来复制我的本地环境,以便我可以工作(即.vimrc等)。
我想知道有没有办法让我不必这样做,但不知何故我的配置在每个远程服务器中变得可用/“可见” ssh

linux ssh remote vimrc bashrc

2
推荐指数
1
解决办法
87
查看次数

如何从命令行检查终端颜色功能?

我写的:

  $ infocmp -1 xterm
        ...
    颜色#8,
    粗体=\E[1m,
    闪烁=\E[5m,
        ...
  $ tput -Txterm 颜色 && echo OK || 回声错误
8
好的
  $ tput -Txterm 闪烁 && 回声 OK || 回声错误
^[[5mOK

所以我可以使用tput来检查视网膜功能。

这个soution是便携式的吗?还有其他解决方案吗?

或者我可以坚持解决方案:

  $ [ $TERM = xterm ] && echo ok || 回声错误
好的

一种用途是在 .bashrc 中设置 PS1。另一个用于突出显示输出以引起 sh 脚本的注意。我可以使用这样的解决方案:

PS1='bash#'
案例“$TERM”在
  xterm*) PS1='\[\033[35m\]bash# \[\033[0m\]'
  ;;
esac

它只使用内置的 bash 命令(如此高效)并且适用于我的所有情况,但不幸的是不能移植。

terminal bash colors bashrc

1
推荐指数
1
解决办法
4221
查看次数

如何使 bash 补全行为像这样?

I\xe2\x80\x99m 不确定我\xe2\x80\x99m 的要求是否可能,但我希望 bash 在制表符按下时执行以下操作:

\n\n
    \n
  • 在第一个选项卡按下时,展开一个公共前缀(跳过/嘟嘟声并且不执行任何操作,我不\xe2\x80\x99t真的介意,如果有\xe2\x80\x99t)
  • \n
  • 在第二个选项卡上按下,列出选项
  • \n
  • 任何后续的选项卡按下都会循环显示这些选项
  • \n
\n\n

如果在整个过程中按下 Tab 以外的任何键,则下一次按 Tab 的行为将与第一步相同。

\n\n

我设法得到一和二:

\n\n
bind \xe2\x80\x9cset show-all-if-unmodified on\xe2\x80\x9d\nbind \xe2\x80\x98set menu-complete-display-prefix on\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

我成功地得到了一和三:

\n\n
bind \xe2\x80\x98set menu-complete-display-prefix on\xe2\x80\x99\nbind \xe2\x80\x98TAB:menu-complete\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,将所有三个选项结合起来会得到一和三。

\n\n

我怎样才能获得所需的行为?

\n\n

谢谢!

\n

bash bashrc tab-completion

1
推荐指数
1
解决办法
2824
查看次数