标签: bash

如何从命令行检查电源线是否连接?

我正在我的笔记本上运行 ubuntu,我需要一种方法来检查(从命令行)电源线是否已连接。是否有任何系统文件可以记录此日志?或者是否有一个 bash 命令可以帮助我?

我需要这个脚本,它会根据电源线是否插入而表现不同。

battery bash ubuntu

10
推荐指数
4
解决办法
8088
查看次数

删除或重命名以 \r 作为文件名的文件

我有一个讨厌的小文件,它的名字似乎是单个字符,而那个字符是 \r

我怎样才能删除这个?

这是我得到的ls -bl

-rw-rwxr--+   1 root             snapplewriters        0 Aug 29  2011 \r
Run Code Online (Sandbox Code Playgroud)

ls -l 只是显示它“?”

linux bash filesystems

10
推荐指数
3
解决办法
4512
查看次数

裸 < 有什么作用?

bash 如果您运行类似的命令,似乎不会抱怨

$ < some-file-that-exists
Run Code Online (Sandbox Code Playgroud)

似乎什么都没有发生。

你也可以使用

$ <<<"any string"
Run Code Online (Sandbox Code Playgroud)

甚至过程替换。

那么这到底是做什么的,为什么允许这样做。它对任何事情都有用吗?

bash

10
推荐指数
2
解决办法
764
查看次数

如何使“bash -x”(调试模式)递归到源脚本中?

我正在尝试调试 bash 在 Linux 登录初始化时所做的事情。我读过“bash -x”将使 bash 打印出它在做什么,但它不会像“set -x”那样打印源文件中的命令。我不能使用“set -x”,因为初始化在我调用它之前运行。“bash -x”似乎在 OS X 上递归得很好,但这可能是因为 bash 版本。

Linux:3.2.25

OS X:3.2.48

以下是 Linux 上非递归行为的摘录:

bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...
Run Code Online (Sandbox Code Playgroud)

注意 /etc/profile.d/vim.sh 的来源,但它的命令没有打印出来。有没有不升级的解决方法?这是版本差异导致的吗?

linux bash macos

10
推荐指数
1
解决办法
4582
查看次数

禁用 Bash 的可编程自动完成(基于命令)

我的 Fedora 16 中的 Bash 似乎根据命令本身自动完成参数。所以如果我例如输入

cd Tab

...它只会显示目录。

然而,有太多命令不知道预期的输入类型,那么有什么方法可以禁用此功能?

bash autocomplete

10
推荐指数
3
解决办法
6810
查看次数

没有匹配项时如何处理 bash * 匹配项?

*.txt目录中实际存在文件时,以下 bash 代码段效果很好。

for txt in *.txt
do                                               
  echo "loading data from $txt"
done   
Run Code Online (Sandbox Code Playgroud)

如果没有,文字*.txt会作为 $txt 进入循环(不好)。

如何更改此代码以便在没有*.txt文件时do ... done跳过该块?

bash globbing

10
推荐指数
2
解决办法
3999
查看次数

计算文件第一列中的出现次数

我们有这个文件:

1 2 
1 3
1 2
3 3
52 1
52 300
Run Code Online (Sandbox Code Playgroud)

和 1000 多个。

我想计算每个值在第一列中出现的次数。

1  3 
3  1
52 2
Run Code Online (Sandbox Code Playgroud)

这意味着我们看了1三遍。

在 Perl、AWK 或 Bash 中,我该怎么做?

linux bash perl awk

10
推荐指数
1
解决办法
2万
查看次数

为什么有些(通常很长)命令在 bash &amp; zsh 中出现乱码?

很多时候,当我在 bash 或 zsh 中输入一个长命令时(这是我肯定见过的仅有的两个 shell),光标会扭曲到我输入的字符串中间的某个位置,谁能解释为什么会这样,如果可以做些什么呢?

我注意到,当我浏览 shell 的历史记录(使用箭头键)时,经常会发生这种情况,当我遇到一个很长的条目时,新的长条目会与之前的条目混淆,从而导致文本出现乱码。

我有一个短字符串的例子,我刚刚注意到:

历史包含:

mkdir sune1
mkdir sune2
Run Code Online (Sandbox Code Playgroud)

如果我导航到mkdir sune1,然后导航到,mkdir sune2我希望我的命令行是mkdir sune2(因为这是我现在导航到的) - 但我得到mkdir1sune2.

多年来我经常注意到这一点,但不要让它太困扰我,但我认为是时候改变了!那么,有什么想法吗?

bash zsh shell

10
推荐指数
1
解决办法
1430
查看次数

xargs --replace/-I 用于单个参数

我正在尝试使用 xargs 为每个提供的参数运行一个命令,但不幸的是 --replace/-I 标志在与 -n 结合时似乎无法正常工作。无论 -n 选项如何,{} 似乎都将扩展为从 stdin 读取的完整参数列表。

不幸的是,网络上的所有示例似乎都是用于命令 (mv, cp, rm) 的,这些命令将采用多个参数,其中 {} 展开。

例如,在运行时:

echo a b c d | xargs -n 1 -I {} echo derp {}
Run Code Online (Sandbox Code Playgroud)

输出是:

derp a b c d
Run Code Online (Sandbox Code Playgroud)

但我预计:

derp a
derp b
derp c
derp d
Run Code Online (Sandbox Code Playgroud)

但是,在没有 -I {} 的情况下运行它会产生预期的结果:

echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Run Code Online (Sandbox Code Playgroud)

有没有办法用 xargs 实现这一点?我的最终目的是用它来运行多个(并行)ssh 会话,比如

echo server{1..90} | xargs …
Run Code Online (Sandbox Code Playgroud)

linux ssh bash command-line xargs

10
推荐指数
1
解决办法
3347
查看次数

使用“源”运行脚本时如何正确恢复设置?

我正在编写一个需要使用 执行的脚本source,因为它的任务是修改环境。在脚本期间,我想使用set -e以便任何错误停止脚本。该脚本如下所示:

#!/bin/bash
set -e
# do something
cd somewhere
source anotherScript
Run Code Online (Sandbox Code Playgroud)

问题是set -e在脚本完成后自然保持有效。set当脚本停止时(以任何方式 - 成功完成或出错),我如何确保更改的选项正确恢复到其先前的值?

script bash bash-scripting

10
推荐指数
2
解决办法
3438
查看次数