我需要使用 运行我的脚本sudo,因为它包含使用 apt 安装程序的命令。所以我这样做:
sudo ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
内容:
#!/bin/bash
# add alias .bashrc (work)
echo "alias myupgrade='sudo aptitude -y safe-upgrade && sudo updatedb'" | sudo tee -a /home/my_user/.bashrc > /dev/null
# or
# sudo -u my_user bash -c "echo alias myupgrade=\"'sudo aptitude -y safe-upgrade && sudo updatedb'\"" >> ~/.bashrc
# load changes (doesn't work)
sudo -u my_user bash -c "source /home/my_user/.bashrc"
# rest of script (not relevant for the question). e.g:
apt -y install foo bar etc
Run Code Online (Sandbox Code Playgroud)
我的脚本将别名添加到 bashrc …
我意识到我需要手动source ~/.bashrc归档或手动source .profile归档才能使.bashrc文件中指定的设置生效。以下是对完整~/.bashrc文件的一些补充:
export LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib/wx
export LD_LIBRARY_PATH=/usr/local/lib/wx/3.3.0
export LD_LIBRARY_PATH=/home/raphy/wxWidgets
Run Code Online (Sandbox Code Playgroud)
.bashrc需要注意的是,我遇到了仅针对库的非永久设置的问题wxWidgets,为此我添加了最后四行。
我评论了wx库路径.bashrc并添加了这些行
/etc/ld.so.conf.d/wx.conf并运行sudo ldconfig:
raphy@raohy:/etc/ld.so.conf.d$ sudo ldconfig
raphy@raohy:/etc/ld.so.conf.d$ cat wx.conf
export LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib/wx
export LD_LIBRARY_PATH=/usr/local/lib/wx/3.3.0
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在。
我必须做什么才能避免手动执行source ~/.profile或source ~/.bashrc?
我试图在最后添加源命令,这样我就不必在每个会话的命令行中输入它,我所做的添加是,在文件的末尾,
# Load Root Files
source /home/user/file/blah/blah/thisroot.sh
Run Code Online (Sandbox Code Playgroud)
看来我搞砸了。现在当我运行标准命令来运行程序时,我得到
user@user-laptop:~$ root -l
bash: /home/user/Downloads/root/bin/root: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我想我可能会恢复我所做的任何更改。但现在我什至无法打开.bashrc文件。
$ emacs .bashrc&
[1] 2478
user@user-laptop:~$ Command 'emacs' is available in '/usr/bin/emacs'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
emacs: command not found
Run Code Online (Sandbox Code Playgroud)
现在你可能通过这一切意识到我是这里的 n00b。请帮帮我。
我在 omg ubuntu 中遵循了本指南。
我刚刚用“AsusInfinity”替换了“GalaxyNexus”。
现在终端不会打开打印这个:

然后关闭......
最后3个命令做了什么(在android-connect之前)?我能做些什么来解决这个问题?
以前我在我的.bashrc文件中定义了一个变量。现在我source再次评论它和文件。然而,echo 命令仍然返回先前的值。
1)
$ echo $DB_ROOT
/home/mahmood/db-4.0
Run Code Online (Sandbox Code Playgroud)
2)
$ grep DB_ROOT .bashrc
#export DB_ROOT=/home/mahmood/db-4.0
#export DB_ROOT=/home/mahmood/db-4.0-default
#export SCRIPT_ROOT=$DB_ROOT/scripts
#export SCRIPT_ROOT2=$DB_ROOT/scripts
#export STAT_DIR=$DB_ROOT/stat-manager
#export CKPTDIR=$DB_ROOT/checkpoints
#export PATH=$SIMICS_ROOT/bin:$SIMICS_ROOT/amd64-linux/bin:$DB_ROOT/stat-manager:$PATH
Run Code Online (Sandbox Code Playgroud)
3)
$ source .bashrc
$ echo $DB_ROOT
/home/mahmood/db-4.0
Run Code Online (Sandbox Code Playgroud)
该source命令无效。我错过了另一个搜索位置吗?
正如这篇文章所说,它~/.bashrc是在我使用的 Ubuntu 12.04 LTS 服务器中自动获取的。我不知道他从哪里得到这些信息,但由于它还没有被否决,我相信这是真的。
我用这个脚本来检查它是否来源:
if [ -f ~/.bashrc ]; then
echo "Not sourced!";
fi
Run Code Online (Sandbox Code Playgroud)
仅供参考:目前的权限是 775,所有者是我。
那么为什么我的~/.bashrc不是来源?
我正在使用 Lubuntu 14.04 开发 VM,
我已经创建了一个脚本 a.sh,
#!bin/bash
echo "aaaa" >> a.txt
Run Code Online (Sandbox Code Playgroud)
我的 /etc/rc.local 文件如下:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
bash /home/sentinel/a.sh
echo "hey" >> …Run Code Online (Sandbox Code Playgroud) 文件;;中这段代码的含义是什么~/bashrc?
case $- in
*i*) ;;
*) return;;
esac
Run Code Online (Sandbox Code Playgroud)
我可以;;通过其他方式使用吗?在哪里?
这个问题有两个假设:
我的 root 用户的交互式 shell 运行 bash
.bashrc 仅在交互式 shell 上调用
如果我将众所周知的 fork 炸弹(:(){ :|: & };:-不要运行它!)附加到 root.bashrc文件的末尾,这是否会阻止某人在我不希望他们访问交互式 root shell 时?显然不是最好的解决方案,为了好奇心可以做更多的事情。我只是想知道人们对此有何看法。
编辑:我知道这毫无用处。我只是好奇。
我目前的理解是每次打开新终端时都会运行添加到这两个文件的命令。那是对的吗?因为在很多地方,我看到建议将我想在登录时执行的命令放在那里,但是如果每次打开新终端时都执行它们,那么我不希望那样。你能帮我理解它们是如何工作的吗?还有它们之间有什么区别?
如果我理解正确,那么我可以在哪里放置我只想在登录时执行的命令,而不是每次打开新终端时执行的命令?我知道我可以从“启动应用程序”的 GUI 执行此操作,但如果可能,我有兴趣在文件中执行此操作。