[英]Escaping a string with quotes in bash alias file
我想在我的~/.bash_aliases
文件中输入以下命令:
grep screen /var/log/auth.log|grep "$(date|awk '{print $2" "$3}')"
我尝试将以下内容放入别名文件中:
alias unlocks=grep screen /var/log/auth.log|grep "$(date|awk '{print $2" "$3}')"
但我得到以下信息:
bash:别名:屏幕:找不到
bash:别名:/var/log/auth.log:找不到
大概是因为命令字符串中有空格,通常可以通过引用整个字符串来解决空格,但是我已经使用了两种类型的引号,而且我无法弄清楚如何正确地对它们进行转义。
请有人帮忙吗?
不要试图将复杂的东西作为别名。 而是在.bashrc
定义一个函数。
unlocks () {
grep screen /var/log/auth.log | grep "$(date +"%b %d")"
}
另外,当您可以直接调整date
的输出时,请不要使用awk
。 但是,您可以使用awk
替换两个grep
实例:
unlocks () {
awk -v date=$(date +"%b %d") '/screen/ && $0 ~ date' /var/log/auth.log
}
alias foo="my command with\\"quotes\\""
大多数情况下, alias foo="my command with\\"quotes\\""
应正常工作
编辑:由于bash
将评估字符串,因此您还需要转义其他特殊字符,例如$
在您的情况下: alias unlock="grep screen /var/log/auth.log|grep \\"\\$(date|awk '{print \\$2\\" \\"\\$3}')\\""
应该可以解决问题。
有一个简单的方法和一个困难的方法。
最简单的方法:把代码放到称为脚本文件unlocks
里面的文件夹$HOME/bin
。 在大多数系统中,该文件夹被添加到路径中。 使用chmod +x $HOME/bin/unlocks
使脚本可执行。
困难的方法:您可以使用嵌套的引号,但是它很难看,易碎,而且...我不建议这样做。 但是,如果必须的话,它将如下所示:
alias unlocks='grep screen /var/log/auth.log|grep "$(date|awk '"'"'{print $2" "$3}'"'"')"'
要在单个带引号的字符串中获得单个嵌套的单引号,您需要'"'"'
第一个对号结束当前字符串。 "'"
为您提供单引号,shell将在其后附加当前字符串。 然后最后一个滴答声继续该字符串。
alias unlocks="..."
在这种情况下将不起作用,因为它将立即运行date|awk '{print $2" "$3}'
并将结果放入别名中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.