我在 ~/.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 窗口上执行。
我有一个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?
请注意,不幸的是,对于不同的用例使用不同的用户对我来说不是一个选择。
在 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,它不会创建这样的别名。
这样做的正确方法是什么?
我创建了一个自定义的.vimrc,并.bashrc在我的本地机器。
另外我有几个vim我觉得有用的插件。现在我ssh远程服务器工作非常频繁。但是每次为了工作,我都需要花费/浪费一些时间来复制我的本地环境,以便我可以工作(即.vimrc等)。
我想知道有没有办法让我不必这样做,但不知何故我的配置在每个远程服务器中变得可用/“可见” ssh?
我写的:
$ 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 命令(如此高效)并且适用于我的所有情况,但不幸的是不能移植。
I\xe2\x80\x99m 不确定我\xe2\x80\x99m 的要求是否可能,但我希望 bash 在制表符按下时执行以下操作:
\n\n如果在整个过程中按下 Tab 以外的任何键,则下一次按 Tab 的行为将与第一步相同。
\n\n我设法得到一和二:
\n\nbind \xe2\x80\x9cset show-all-if-unmodified on\xe2\x80\x9d\nbind \xe2\x80\x98set menu-complete-display-prefix on\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n我成功地得到了一和三:
\n\nbind \xe2\x80\x98set menu-complete-display-prefix on\xe2\x80\x99\nbind \xe2\x80\x98TAB:menu-complete\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n然而,将所有三个选项结合起来会得到一和三。
\n\n我怎样才能获得所需的行为?
\n\n谢谢!
\n