标签: bash

有没有办法在bash中保存键盘宏?

我想永久保存我使用和录制的键盘宏。有没有一种简单的方法可以为我新录制的宏“查看源代码”,以便我可以将它绑定到 ~/.inputrc 中的键盘快捷键?C-x (C-x )

我以为dump-macros会做,但似乎没有...

bash macros readline inputrc

12
推荐指数
1
解决办法
3078
查看次数

备份 Firefox 书签和其他个人文件 bash 脚本

我正在为我的个人桌面从 Windows 迁移到 Ubuntu,我想知道一种简单的方法来备份个人数据,例如 Firefox 书签、个人文档等...

在 Windows 中,我手动复制所有内容,而在 Ubuntu 中,我想创建一个 bash 脚本来自动完成。

除了创建文件并使其可执行之外,我对 bash 脚本一无所知,还有这个简单的例子:

#!/bin/bash
cp /files/file.doc /media/flashdrive/
Run Code Online (Sandbox Code Playgroud)

如何自动检测我当前的个人资料?(我的电脑上目前有 3 个配置文件,一个我不使用,一个给我的没有书签的妻子,还有我的)。

windows linux backup bash

12
推荐指数
1
解决办法
2288
查看次数

递归 zgrep 不起作用

我有一个包含大量.gz文件的目录层次结构。我希望能够为字符串“foo”递归地grep它们。根据我在网上阅读的内容,以下内容应该有效:

zgrep -R -H "foo" .
Run Code Online (Sandbox Code Playgroud)

但是,这永远不会返回任何结果。如果我用文件名替换点,它确实有效。例如,

zgrep -R -H "foo" myFile.gz
Run Code Online (Sandbox Code Playgroud)

然而,显然,这不再是递归的。

我知道“foo”在一些文件中,因为以下命令返回许多结果:

find . -iname "*.gz" | xargs zgrep "output" | less
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么我的递归 zgrep 命令不起作用。我在 RHEL linux 机器上

linux bash grep command-line

12
推荐指数
3
解决办法
4万
查看次数

如何确定应用程序是否没有响应?

我在 OSX 上有一个应用程序,它反复进入“无响应”状态并且必须被强制终止。我希望将其自动化,但是在使用ps检查流程时,我没有看到任何与“未响应”状态相对应的内容。我查看了状态指示器,但无论是否响应,应用程序都显示为S。

state 状态由字符序列给出,例如“RWNA”。第一个字符表示进程的运行状态:

  • I 标记一个空闲的进程(睡眠时间超过大约 20 秒)。
  • R 标记一个可运行的进程。
  • S 标记睡眠时间少于 20 秒的进程。
  • T 标记一个停止的进程。
  • U 将进程标记为不间断等待。
  • Z 标记一个死进程(一个“僵尸”)。

我如何确定进程是否像活动管理器那样没有响应


我也对 AppleScript 解决方案持开放态度。

mac bash process macos

12
推荐指数
1
解决办法
3684
查看次数

Heredoc 中的新行消失在文件中

我正在将一个 heredoc 回显到一个文件中,但换行符正在丢失

运行这个脚本

#!/bin/bash 

NAME="$1"

mkdir -p $NAME

FILE=$(cat <<SETVAR
name = "$NAME"
type = "test"
SETVAR
)

echo $FILE > $NAME/$NAME.txt
Run Code Online (Sandbox Code Playgroud)

使用 arg: foo,导致 foo/foo.txt 中的文件包含

name = "foo" type = "test"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

bash newlines

12
推荐指数
1
解决办法
6108
查看次数

如何查找文件并合计它们的大小?

我想找到一系列文件(基于通配符表达式)并汇总它们的磁盘使用量。

像这样的东西:

$ find . -name 'flibble*' -ctime +90 -exec du -sh {} \;

2.1G    ./flibble_116.log
2.1G    ./flibble_83.log
2.1G    ./flibble_211040_157.log
2.1G    ./flibble3747_51.log
Run Code Online (Sandbox Code Playgroud)

这项工作。但它不会产生我正在寻找的结果。它列出了每个文件使用的空间,就像find遍历它们一样。

我想要的是du找到的所有文件的总数。

linux bash

12
推荐指数
1
解决办法
6685
查看次数

在 Ansible 中以分离模式运行远程脚本/应用程序

我无法从 Ansible 剧本“分离地”运行远程应用程序启动脚本。脚本将运行,但我无法让它获得/保持分离。我可能做错了什么,但什么?

这是我的复制器。

  1. 我在 Test.java 中的远程 Java 应用程序运行了 10 秒:

    class Test {
        public static void main(String[] args) {
            for (int I = 1; I <= 10; i++) {
                System.out.println("Hello world " + I);
    
                try { Thread.sleep(1000);
                } catch (Exception e) { System.out.println("Exception caught: " + e);
                }
    } } }
    
    Run Code Online (Sandbox Code Playgroud)

将其编译为 Test.class (javac Test.java),然后使用“java Test”运行该类按预期工作(给出 10 条输出消息,然后退出)。

  1. 我运行此应用程序的可执行 shell 脚本(如在 chmod 755 中)如下所示:

    #!/bin/bash
    java Test &
    
    Run Code Online (Sandbox Code Playgroud)

手动运行它也完全没问题:Java 应用程序在我的控制台中运行并生成相同的标准输出,但 shell 脚本已经退出,我重新控制了我的 bash 会话。

  1. 现在通过来自另一台服务器的 ansible playbook 运行它。我尝试以不同的方式使用“command”模块和“shell”模块,但无济于事......

    --- …
    Run Code Online (Sandbox Code Playgroud)

script bash ansible

12
推荐指数
3
解决办法
5万
查看次数

在 Bash 中在双引号和单引号中使用反引号时的区别

为什么以下两次执行的输出不同?(我的最终命令中的变量需要双引号)

$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!
Run Code Online (Sandbox Code Playgroud)

sudo bash permissions bash-scripting

12
推荐指数
2
解决办法
2190
查看次数

ssh + sudo + su 进入登录shell

我有几台机器,我定期 ssh 进入,只是为了使用sudo su我的会话的其余部分作为某个特殊用途的用户登录。一般工作流程是:

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Run Code Online (Sandbox Code Playgroud)

我想把它归结为一个可以别名的单行代码,这样我就可以为每台机器设置一个别名,然后在一个命令中到达我需要的地方,而无需键入sudo su - specialuser样板。我也许me@othermachine可以sudo su在登录时设置为,但我想保持操作的灵活性,就像me我需要的那样。

注意:我无法控制othermachine或控制它的设置方式;这是我在受雇时采用的既定工作流程。)

我的第一个想法是

ssh me@othermachine "sudo su - specialuser"
Run Code Online (Sandbox Code Playgroud)

和这种工作,但它没有提示我,^C杀死它并将我注销,我认为其他各种事情也可能是错误的。

在阅读Run Remote ssh command with Full Login Shell 之后,我尝试了一些更奇特的东西,比如

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
Run Code Online (Sandbox Code Playgroud)

ssh me@othermachine 'bash -l -c …
Run Code Online (Sandbox Code Playgroud)

ssh sudo bash

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

为什么这不能将我的所有文件解压到给定目录中?

为什么这不能解压给定目录中的所有 zip 文件?

find -name "*.zip" -exec unzip {} + \;
Run Code Online (Sandbox Code Playgroud)

相反,对于每个匹配项,我得到“警告:文件名不匹配:”

linux bash

12
推荐指数
1
解决办法
3455
查看次数