无论是否使用bash,sudo都会有很多陷阱。例如,当以 root 身份登录时
rm -rf ~/bin
Run Code Online (Sandbox Code Playgroud)
和
rm -rf /bin
Run Code Online (Sandbox Code Playgroud)
只有一个角色,但这种差异会让你很不高兴。
为了保护自己免受此类灾难的影响,我在我的/etc/bash.bashrc(系统范围内.bashrc)中使用了它:
if [ $UID -ne 0 ]; then
# ask me before deleting
alias rm='rm -i'
else
# do not delete / or prompt if deleting more than 3 files at a time
alias rm='rm -I --preserve-root'
fi
Run Code Online (Sandbox Code Playgroud)
有了这个,我至少必须在遇到灾难之前确认删除。也许还有更危险的命令,如 rm...
什么是最危险的 bash 命令并保护自己免受日常灾难的影响?
因此,我正在使用 CentOS 6.3 全新安装,并尝试将内容添加到 OpenMPI 的路径中,因此我编辑了 .bash_profile 文件以读取:
FOO='test'
export FOO
# Add support for MPI
PATH=$PATH:/usr/lib64/openmpi/bin
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
Run Code Online (Sandbox Code Playgroud)
当我启动 bash shell 时,这显然没有被读取,我的 $PATH 没有 /usr/lib64/openmpi/bin 路径,并且当我尝试时 FOO 不存在 echo $FOO
.bashrc 读得很好,如果我source ~/.bash_profile创建 FOO 以及我的 $PATH 被正确编辑,但它不会自行运行 .bash_profile 所以如果我能得到任何帮助,那就太好了。
我正在管理一台安装了 CentOS 6.5 x64 的服务器。
在我的 Ubuntu 服务器中,当我运行composer或Laravel的artisanphp cli 命令时,参数是彩色的。

但是当我通过 SSH 连接到 CentOS 服务器并composer再次运行时,这不会发生。

如您所见,目录php-cli按其应有的颜色着色,但应用程序没有(Laravel 的 artisan 命令也有同样的问题)。
(nano如果这有帮助,编辑器也会出现此问题。)
有没有办法在 CentOS 中“着色”这些命令?
提前致谢,
我有一个带有颜色的自定义提示(使用 tput),每次我在服务器中启动非交互式会话时,我都会收到一堆错误。
例如,如果我开始一个像这样的非交互式会话:
ssh root@hostname6 "echo 'hello' ; echo $TERM"
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
hello
xterm
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
stdin: is not a …Run Code Online (Sandbox Code Playgroud) 总结:为什么会失败
$ ssh foo 'R --version | head -n 1'
bash: R: command not found
Run Code Online (Sandbox Code Playgroud)
但这成功了
$ ssh foo 'grep -nHe 'bashrc' ~/.bash_profile'
/home/me/.bash_profile:3:# source the users .bashrc if it exists
/home/me/.bash_profile:4:if [ -f "${HOME}/.bashrc" ] ; then
/home/me/.bash_profile:5: source "${HOME}/.bashrc"
$ ssh foo 'grep -nHe "\WR\W" ~/.bashrc'
/home/me/.bashrc:118:alias R='/share/linux86_64/bin/R'
$ ssh foo '/share/linux86_64/bin/R --version | head -n 1'
R version 2.14.1 (2011-12-22)
Run Code Online (Sandbox Code Playgroud)
? 细节:
我是 2 个集群的(无根)用户。一个使用环境模块,因此该集群上的任何给定服务器都可以(通过module add)提供几乎相同的资源。不幸的是,我也必须在另一个集群上工作,它有单独管理的服务器,所以我养成了这样做的习惯,例如,
EXEC_NAME='whatever'
for S in 'foo' 'bar' 'baz' ; do …Run Code Online (Sandbox Code Playgroud) 我做 Rails 开发。在这个应用程序中,我需要指定环境变量LD_LIBRARY_PATH = /usr/local/oracle/lib,但是当我使用 sudo 脚本/服务器运行应用程序时,它不会运行,因为该库路径不在 root 的 env 中。
我该怎么做才能让它发挥作用?我试图将路径放在根目录下./bashrc,但没有用。
我正在设置一个 ubuntu Web 服务器。我想稍微自定义一下每个人的 bash 提示。(如在 $PS1 中)编辑 /etc/bash.bashrc 似乎不起作用,我认为原因 ~/.bashrc 覆盖了它。问题是,当创建一个新用户时,是什么创建了它的 .bashrc?我希望这个系统的每个用户都有相同的提示。
服务器是 Ubuntu Server 10.4 LTS
谢谢,罗素“TheDigitalNinja”帕金斯
我的.bashrc文件导出一个名为的函数lookup:
lookup() {
grep -r -ne "$1" * | grep -v "TAGS:" | grep -v "tags:"
}
export -f lookup
Run Code Online (Sandbox Code Playgroud)
我可以在 shell 中使用该函数。但是如果我把它放在这样的脚本中:
#!/bin/bash
lookup "foo"
Run Code Online (Sandbox Code Playgroud)
并运行脚本,然后 bash 报告“未找到命令” lookup。这曾经工作过一段时间。我强烈怀疑这在我的系统上的 bash 安全更新后停止工作(可能与 shellshock/bashdoor 相关?)我的 bash 版本是 openSUSE 11.4 上的 4.1.10(1)
如何在 .bashrc 中为 Kate 编辑器创建别名,以便不写入kate file1 file2,而是k file1 file2打开这些文件。