我想弄清楚如何自定义终端的 bash 提示以使用笑脸。我想要的(如示例中所见)是通过 \n 将 cwd 与提示分开,如果命令成功则显示绿色笑脸,如果失败则显示红色悲伤脸。
有任何想法吗?
这是受到 Peepcode 截屏视频的启发。

我想用显示窗口编号的 bash 提示替换状态栏,例如?。如何在 shell 中获取当前窗口号?
有 TMUX_PANE 环境变量,不幸的是没有 TMUX_WINDOW。
我得到的最接近的是:
tmux display-message闪烁窗口/窗格信息,然后取最后一行tmux show-messages并解析它。我不希望每次显示提示时窗口/窗格信息都闪烁。
我是 Linux 新手,经常看到这种情况。有人可以在这里解释这个概念吗?
~/.somefilename
Run Code Online (Sandbox Code Playgroud)
~(波浪号)是什么意思?
我有一个单行命令,可以从 Web 服务器访问日志中列出前 10 个最活跃的 IP 地址:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Run Code Online (Sandbox Code Playgroud)
示例结果集(为简单起见只有 3 个条目)将是:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Run Code Online (Sandbox Code Playgroud)
如您所见,计数在 IP 地址之前,两者由空格分隔。计数前实际上也有空格,但我无法在此处显示它们。
我喜欢对 IP 地址进行反向 DNS 查找,使其看起来像这样:
20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)
Run Code Online (Sandbox Code Playgroud)
如何在不求助于脚本的情况下执行此操作(即坚持使用单行命令)?非常感谢任何建议。
如何删除所有 .swp 文件?我试过了,rm *.swp但我得到了rm: *.swp: No such file or directory
rwxr-xr-x 16 teacher staff 544 Jan 17 13:19 .
drwxr-xr-x 19 teacher staff 646 Jan 16 12:48 ..
-rw-r--r-- 1 teacher staff 20480 Jan 17 09:48 .6-1-period-2.txt.swp
-rw-r--r-- 1 teacher staff 16384 Jan 17 09:05 .6-2-period-6.txt.swp
-rw-r--r--@ 1 teacher staff 6148 Jan 15 16:16 .DS_Store
-rw-r--r-- 1 teacher staff 12288 Jan 16 19:46 .grade8.txt.swp
-rw-r--r-- 1 teacher staff 11070 Jan 17 09:48 6-1-period-2.txt
Run Code Online (Sandbox Code Playgroud) 我需要列出目录的所有子目录,不包括那些与作为参数给出的任何列表匹配的子目录:“SUBDIR1,SUBDIR2,...,SUBDIRN”。
我带来了使用 ls 和 glob 模式的解决方案(来自许多来源)。为了测试这个概念,我在命令行中尝试了以下似乎有效的序列:
DIR="/path/to/dirs"
EXCLUDELIST="subdir1,subdir2"
#transform in a glob pattern for excluding given subdirectories
EXCLUDE="!(${EXCLUDELIST//,/|})"
LIST=$(cd $DIR && ls -l -d $EXCLUDE | grep -E "(^d)" | awk '{print $9}')
Run Code Online (Sandbox Code Playgroud)
但是,当我将它放入未修改的 bash 脚本中时,我收到此错误
ls: cannot access !(subdir1|subdir2): No such file or directory
Run Code Online (Sandbox Code Playgroud)
将此代码放入脚本时我做错了什么?
我正在使用AWS CLI 客户端获取快照的状态,但输出为 JSON 格式。例如。
{
"DBClusterSnapshots": [
{
"AvailabilityZones": [
"us-east-2a",
"us-east-2b",
"us-east-2c"
],
"DBClusterSnapshotIdentifier": "...",
"DBClusterIdentifier": "...",
"SnapshotCreateTime": "2021-12-23T05:59:41.658000+00:00",
"Engine": "aurora",
"AllocatedStorage": 517,
"Status": "copying",
"Port": 0,
"ClusterCreateTime": "2020-01-17T18:59:19.045000+00:00",
"MasterUsername": "...",
"EngineVersion": "5.6.mysql_aurora.1.22.1",
"LicenseModel": "aurora",
"SnapshotType": "manual",
"PercentProgress": 0,
"StorageEncrypted": true,
"KmsKeyId": "...",
"DBClusterSnapshotArn": "...",
"SourceDBClusterSnapshotArn": "...",
"IAMDatabaseAuthenticationEnabled": false,
"TagList": []
}
]
}
Run Code Online (Sandbox Code Playgroud)
grep我可以使用和sed( )的组合| grep Status | sed 's/.*"Status": "//' | sed 's/",//'来隔离“复制”的状态,但我想知道是否有更简单的方法来解析 bash 中的 JSON。例如。var['DBClusterSnapshots'][0]['Status']
在 中.bashrc,我有一些针对像这样的特定环境的配置。
if [ "$(uname)" = 'Linux' ]; then
. "$HOME/.bash.d/ubuntu"
fi
if [ "$(uname)" = 'Darwin' ]; then
. "$HOME/.bash.d/osx"
fi
Run Code Online (Sandbox Code Playgroud)
为了了解当前环境是否在WSL下,我使用/etc/wsl.conf通常只存在于 WSL 中的文件。
if [ -f "/etc/wsl.conf" ]; then
. "$HOME/.bash.d/wsl"
fi
Run Code Online (Sandbox Code Playgroud)
当然,该文件也可以存在于其他环境中。
我应该如何检查当前环境是否在 WSL 中运行?
假设我们有一个/a_long_path_1/foo.doc大小为 12345 字节的文件,我们希望在目录中找到该文件的所有副本/a_long_path_2,并/a_long_path_3递归地包括其所有子目录。副本名称的主要部分可能有所不同foo(尽管扩展名.doc可能保持不变),并且创建/修改日期可能不同,但foo其副本的内容应该相同。
如果我发出find /a_long_path_2 /a_long_path_3 -size 12345c -iname \\*.doc,我得到的列表太大,无法通过手动检查diff。需要自动化。可能使自动化变得困难的附加信息:此命令输出中的某些目录名称find \xe2\x80\xa6包含空格。
需要明确的是:我不希望找到文件系统上所有文件的所有重复项(而是仅找到一个特定文件的所有重复项),甚至不希望作为中间步骤。(无论如何,这样的列表会很大。)
\nbash ×10
linux ×4
command-line ×3
shell ×2
csh ×1
debian ×1
dns ×1
find ×1
globbing ×1
json ×1
macos ×1
networking ×1
prompt ×1
samba ×1
terminal ×1
terminal.app ×1
tmux ×1
ubuntu ×1
ubuntu-20.04 ×1
unix ×1