标签: bash

Bash 自定义提示打破长命令行的换行

我有一个自定义的 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)

linux bash prompt

8
推荐指数
1
解决办法
3014
查看次数

如何在 bash 中以较少的开销查看磁盘使用情况?

du -csh /
Run Code Online (Sandbox Code Playgroud)

以上将花费大量时间来计算,有没有办法以更少的开销查看不太准确的结果?

更新

我想知道的是特定目录下的总大小。

bash disk-space-utilization

8
推荐指数
3
解决办法
1万
查看次数

将用户名传递给脚本,找到用户的主目录

我正在编写一个脚本,当用户登录并检查某个文件夹是否存在或是否是损坏的符号链接时,该脚本会被调用。(这是在 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)

unix bash

8
推荐指数
1
解决办法
4587
查看次数

进程 cmdline 中的前导破折号是什么意思?

我注意到一个进程在我的 linux 服务器上占用了全部 CPU,其中的 COMMAND 列top -c-bash.

cat /proc/<pid>/cmdline也显示-bash

前面的破折号是什么意思?

更多信息:我不知道它是否相关, /proc/<pid>/exe -> /bin/bash (deleted)

linux shell bash command-line-interface process

8
推荐指数
1
解决办法
1380
查看次数

谁可以删除文件?

我创建了一个文件,对它执行了 chmod 000,然后将所有者和组更改为 root:root。我仍然能够以它的原始创建者(不是 root)的身份删除该文件。

谁有权删除文件?

ubuntu bash

8
推荐指数
2
解决办法
3729
查看次数

bash 选项卡完成仅适用于 root

我设置了一个 Ubuntu 12 服务器(在机架空间云上使用他们的预配置映像)并创建了一个非 root 用户。当我以标准用户身份登录时,在终端上按 [TAB] 会输出一个实际的选项卡,然后按 [UP] 会输出 ^[[A 。但是,如果我以 root 身份登录,[UP] 会输入我的最后一个命令,并且 [TAB] 会自动完成。

.bashrc 文件在两个用户之间看起来完全相同。我真的不知道还能去哪里看。

ubuntu bash command-line-interface bashrc ubuntu-12.04

8
推荐指数
1
解决办法
2002
查看次数

为什么 cron.weekly 不运行?

当我注意到我放在 /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)

bash cron debian-squeeze

8
推荐指数
1
解决办法
6018
查看次数

在 shell 中查找大小非零的文件

我需要获取目录中非零大小的文件名称列表。这应该在 shell 脚本中,所以 bash(或 Perl one-liner)将是理想的。

bash perl

8
推荐指数
1
解决办法
5373
查看次数

别名在脚本中不起作用 #!/usr/bin/env php

我有一些 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呢?

php bash env

8
推荐指数
1
解决办法
5653
查看次数

从标准输入解压缩到标准输出 - funzip,python

目标是从 stdin 读取 zip 文件并解压缩到 stdout。

Funzip 有效并且是我正在寻找的解决方案,zip 包含一个文件,不幸的是,当压缩文件大小约为 1GB 或更大时,funzip 会失败:

funzip error: invalid compressed data--length error
Run Code Online (Sandbox Code Playgroud)

更新:我发现上述错误可能并不表示实际错误。比较两个未压缩的文件,一个是传统解压缩,另一个是通过管道使用 funzip(将上述错误写入 stderr),这些文件是相同的。我想保持这个开放,所以这可以被确认或报告。

使用python的相关解决方案: 解压缩通过管道飞入的文件

然而,这个输出被定向到一个文件。

linux compression python bash pipe

8
推荐指数
3
解决办法
2万
查看次数