.bashrc或.bash_profile哪个配置文件是 ssh-agent 的合适位置?我正在寻找一个答案来解释交互式 shell 和登录 shell 之间的区别。
我有一个自定义的 bash 提示,它为我的用户名、主机名和当前工作目录着色。颜色显示正确,但是当我键入需要换行的命令行时,终端不会开始新行,而是覆盖命令的开头。这发生在 RHEL 4 和 Debian 上。
这个问题详细说明了 OS X 上的一个类似问题;似乎这是一个错误终止的控制序列的问题,但是我看不出是什么原因造成的,因为我到处都使用 $(tput) 代码,而不是手工编写我的代码。下面的片段 - 有没有人能够建议我做错了什么?
# Control codes
COL_RST=$(tput sgr0) # Remove all colour formatting
COL_BRIGHT=$(tput bold) # Emphasise
# Foreground
COL_G=$(tput setaf 2) # Green
COL_Y=$(tput setaf 3) # Yello
COL_B=$(tput setaf 4) # Blue
COL_USR=${COL_Y}${COL_BRIGHT}
COL_PWD=${COL_B}${COL_BRIGHT}
COL_HST=${COL_G}${COL_BRIGHT}
# Set prompt
PROMPT="${COL_USR}\u${COL_RST}@${COL_HST}\h${COL_RST}:${COL_PWD}\W${COL_RST}"
# Put it all together....
PS1="[$PROMPT]\$ "
export PS1
Run Code Online (Sandbox Code Playgroud) du -csh /
Run Code Online (Sandbox Code Playgroud)
以上将花费大量时间来计算,有没有办法以更少的开销查看不太准确的结果?
更新
我想知道的是特定目录下的总大小。
我正在编写一个脚本,当用户登录并检查某个文件夹是否存在或是否是损坏的符号链接时,该脚本会被调用。(这是在 Mac OS X 系统上,但问题纯粹是 bash)。
它不优雅,也不起作用,但现在它看起来像这样:
#!/bin/bash
# Often users have a messed up cache folder -- one that was redirected
# but now is just a broken symlink. This script checks to see if
# the cache folder is all right, and if not, deletes it
# so that the system can recreate it.
USERNAME=$3
if [ "$USERNAME" == "" ] ; then
echo "This script must be run at login!" >&2
exit 1
fi
DIR="~$USERNAME/Library/Caches"
cd $DIR …Run Code Online (Sandbox Code Playgroud) 案件:
例子:
$ cp myfile.zip /mnt/winbox-c/Progr<tab> key pressed here
发生这种情况时,我是否可以按下一个键来使 bash 脱离挂起状态?
我正在尝试编写init配置,将我的守护进程的输出重定向到两个文件(对于 stdout 和 stderr)。问题是,它不起作用。我现在正在读这个。
所以,我已经完成了这个 shell 脚本来测试这种方法。它不起作用:
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Seed kurokikaze starter"
#NAME=node
DAEMON="/etc/node-version/0.1.99/bin/node"
DAEMON_ARGS="/etc/seed/kurokikaze/server.js"
DAEMON_DIR="/etc/seed/kurokikaze"
APPLOG_FILE="/var/log/seed/kurokikaze"
ERRLOG_FILE="/var/log/seed/kurokikaze-err"
PIDFILE="/var/run/seeds/kurokikaze.pid"
SCRIPTNAME="/etc/seed-init/kurokikaze"
NCMD="exec $DAEMON $DAEMON_ARGS 1>>$APPLOG_FILE 2>>$ERRLOG_FILE"
start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON --startas /bin/sh -- $NCMD
Run Code Online (Sandbox Code Playgroud)
但是,如果您在没有将守护程序包装在单独的 shell 中的情况下启动它,它会按预期工作(只是没有 stderr/stdout 重定向):
start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON -- ${DAEMON_ARGS}
Run Code Online (Sandbox Code Playgroud)
问题是:为什么第一个脚本不起作用?系统是Debian Lenny,start-stop-daemon版本是1.14.29
众所周知,env.variable 中的额外空间会导致 bash 脚本中的 / 目录被删除。
#!/bin/bash
...
rm -rf /$MYPATH
Run Code Online (Sandbox Code Playgroud)
如果 $MYPATH 包含像"dir"或"dir /"这样的值,它将导致"rm -rf / dir"或"rm -rf dir /"。并会导致“rm -rf /”
是否有任何最佳做法可以防止这种情况?
我有一个 bash 脚本,可以在其中获取磁盘使用情况,例如60%. 如何删除%符号?使用 grep 还是 awk?
在 Bash 下使用 执行备份时rsync,我试图排除顶级目录中的所有点文件和隐藏目录,但不排除其他目标目录中的那些。例如:
/copyme.c
/.dontcopythisfile
/.dontcopythisdirectory/or_its_contents
/directory/.butcopymetoo
Run Code Online (Sandbox Code Playgroud)
rsync -a --include=".includeme" --exclude=".*" . DEST无法复制子目录中所需的点文件,但诸如此类的变体--exclude="./.*"也失败。
建议?这是否需要过滤规则而不是更简单的规则--exclude?