我有一个自定义的 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) 我注意到一个进程在我的 linux 服务器上占用了全部 CPU,其中的 COMMAND 列top -c是-bash.
cat /proc/<pid>/cmdline也显示-bash。
前面的破折号是什么意思?
更多信息:我不知道它是否相关, /proc/<pid>/exe -> /bin/bash (deleted)
我创建了一个文件,对它执行了 chmod 000,然后将所有者和组更改为 root:root。我仍然能够以它的原始创建者(不是 root)的身份删除该文件。
谁有权删除文件?
我设置了一个 Ubuntu 12 服务器(在机架空间云上使用他们的预配置映像)并创建了一个非 root 用户。当我以标准用户身份登录时,在终端上按 [TAB] 会输出一个实际的选项卡,然后按 [UP] 会输出 ^[[A 。但是,如果我以 root 身份登录,[UP] 会输入我的最后一个命令,并且 [TAB] 会自动完成。
.bashrc 文件在两个用户之间看起来完全相同。我真的不知道还能去哪里看。
当我注意到我放在 /etc/cron.weekly Debian6 服务器上的备份脚本没有执行时,我将这个小脚本放在其中,以查看是否执行了每周的 cronjob:
#!/bin/bash
echo 'CRON RAN' > /var/log/cron-weekly-runcheck.log
Run Code Online (Sandbox Code Playgroud)
将其另存为
-rwxr-xr-x 1 root root 64 Jul 15 02:14 /etc/cron.weekly/runcheck.sh
Run Code Online (Sandbox Code Playgroud)
当我今天检查时,它应该创建的日志文件不存在。
crontab 如下所示(据我所知,这应该是默认的 debian6 crontab):
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 1 root test -x /usr/sbin/anacron || ( cd / && …Run Code Online (Sandbox Code Playgroud) 我需要获取目录中非零大小的文件名称列表。这应该在 shell 脚本中,所以 bash(或 Perl one-liner)将是理想的。
我有一些 PHP 脚本,它们以#!/usr/bin/env php. 默认解释器是 PHP 4.4,但脚本需要 PHP 5.3,所以我在 中创建了一个别名~/.bashrc:
alias php="/usr/local/bin/php5-53LATEST-CLI"
Run Code Online (Sandbox Code Playgroud)
因此调用php -v显示我 5.3 但#!/usr/bin/env php仍然使用 4.4。我不会更改脚本。那么我怎样才能获得 PHP 5.3#!/usr/bin/env php呢?
目标是从 stdin 读取 zip 文件并解压缩到 stdout。
Funzip 有效并且是我正在寻找的解决方案,zip 包含一个文件,不幸的是,当压缩文件大小约为 1GB 或更大时,funzip 会失败:
funzip error: invalid compressed data--length error
Run Code Online (Sandbox Code Playgroud)
更新:我发现上述错误可能并不表示实际错误。比较两个未压缩的文件,一个是传统解压缩,另一个是通过管道使用 funzip(将上述错误写入 stderr),这些文件是相同的。我想保持这个开放,所以这可以被确认或报告。
使用python的相关解决方案: 解压缩通过管道飞入的文件
然而,这个输出被定向到一个文件。