在 bash 别名文件中转义带引号的字符串

Oob*_*dan 1 linux bash

我想将以下命令放入我的~/.bash_aliases文件中:

grep screen /var/log/auth.log|grep "$(date|awk '{print $2" "$3}')"
Run Code Online (Sandbox Code Playgroud)

我尝试将以下内容放入别名文件中:

alias unlocks=grep screen /var/log/auth.log|grep "$(date|awk '{print $2" "$3}')"
Run Code Online (Sandbox Code Playgroud)

但我得到以下信息:

bash:别名:屏幕:未找到

bash:别名:/var/log/auth.log:找不到

据推测,这是因为命令字符串中存在空格,通常可以通过引用整个字符串来解决,但我已经使用了两种类型的引号,并且无法弄清楚如何正确转义它们。

请问有人可以帮忙吗?

che*_*ner 6

不要尝试将如此复杂的东西设为别名。而是定义一个函数.bashrc

unlocks () {
    grep screen /var/log/auth.log | grep "$(date +"%b %d")"
}
Run Code Online (Sandbox Code Playgroud)

awk另外,当您可以直接调整输出时不要使用date。但是,您可以使用awk替换以下两个实例grep

unlocks () {
     awk -v date=$(date +"%b %d") '/screen/ && $0 ~ date' /var/log/auth.log
}
Run Code Online (Sandbox Code Playgroud)