我正在我的笔记本上运行 ubuntu,我需要一种方法来检查(从命令行)电源线是否已连接。是否有任何系统文件可以记录此日志?或者是否有一个 bash 命令可以帮助我?
我需要这个脚本,它会根据电源线是否插入而表现不同。
我有一个讨厌的小文件,它的名字似乎是单个字符,而那个字符是 \r
我怎样才能删除这个?
这是我得到的ls -bl:
-rw-rwxr--+ 1 root snapplewriters 0 Aug 29 2011 \r
Run Code Online (Sandbox Code Playgroud)
ls -l 只是显示它“?”
bash 如果您运行类似的命令,似乎不会抱怨
$ < some-file-that-exists
Run Code Online (Sandbox Code Playgroud)
似乎什么都没有发生。
你也可以使用
$ <<<"any string"
Run Code Online (Sandbox Code Playgroud)
甚至过程替换。
那么这到底是做什么的,为什么允许这样做。它对任何事情都有用吗?
我正在尝试调试 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 的来源,但它的命令没有打印出来。有没有不升级的解决方法?这是版本差异导致的吗?
我的 Fedora 16 中的 Bash 似乎根据命令本身自动完成参数。所以如果我例如输入
cdTab
...它只会显示目录。
然而,有太多命令不知道预期的输入类型,那么有什么方法可以禁用此功能?
当*.txt目录中实际存在文件时,以下 bash 代码段效果很好。
for txt in *.txt
do
echo "loading data from $txt"
done
Run Code Online (Sandbox Code Playgroud)
如果没有,文字*.txt会作为 $txt 进入循环(不好)。
如何更改此代码以便在没有*.txt文件时do ... done跳过该块?
我们有这个文件:
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 中,我该怎么做?
很多时候,当我在 bash 或 zsh 中输入一个长命令时(这是我肯定见过的仅有的两个 shell),光标会扭曲到我输入的字符串中间的某个位置,谁能解释为什么会这样,如果可以做些什么呢?
我注意到,当我浏览 shell 的历史记录(使用箭头键)时,经常会发生这种情况,当我遇到一个很长的条目时,新的长条目会与之前的条目混淆,从而导致文本出现乱码。
我有一个短字符串的例子,我刚刚注意到:
历史包含:
mkdir sune1
mkdir sune2
Run Code Online (Sandbox Code Playgroud)
如果我导航到mkdir sune1,然后导航到,mkdir sune2我希望我的命令行是mkdir sune2(因为这是我现在导航到的) - 但我得到mkdir1sune2.
多年来我经常注意到这一点,但不要让它太困扰我,但我认为是时候改变了!那么,有什么想法吗?
我正在尝试使用 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) 我正在编写一个需要使用 执行的脚本source,因为它的任务是修改环境。在脚本期间,我想使用set -e以便任何错误停止脚本。该脚本如下所示:
#!/bin/bash
set -e
# do something
cd somewhere
source anotherScript
Run Code Online (Sandbox Code Playgroud)
问题是set -e在脚本完成后自然保持有效。set当脚本停止时(以任何方式 - 成功完成或出错),我如何确保更改的选项正确恢复到其先前的值?