我有一个名为 的文件,.bash_aliases
用于保存我的别名。虽然文件中只有一个别名,但它可以正常工作,但是当我尝试创建一个新别名时,终端无法识别命令行。这是因为撇号'
和引号之间存在冲突吗"
?
别名:
alias vid-dl="youtube-dl -o 'Videos/randon/%(title)s.%(ext)s'"
错误:
vid-dl: command not found
我在终端中使用了如下别名:
vid-dl URL
在 中.bash_aliases
,是否需要使用某些东西来指示行已结束?在其他编程语言中,例如 JavaScript 和 C#,行以分号 ( ) 结尾;
。
当我测试命令行 youtube-dl -o 'Videos/randon/%(title)s.%(ext)s
没有别名它也能完美运行。
答案1
使用反斜杠\
将以下字符标记为“非特殊”,因此从 MY 开始~/.bashrc
:
alias bigopenfiles="sudo lsof / | awk '{if(\$7 > 1048576) print \$7/1048576 \"MB\" \" \" \$9 }' | sort -n -u"
#
alias deletedfiles="sudo lsof / | egrep 'PID|\(deleted\)'"
#
让我们把这个复杂的表达式拆开:
alias bigopenfiles="sudo lsof / | awk '{if(\$7 > 1048576) print \$7/1048576 \"MB\" \" \" \$9 }' | sort -n -u"
被 s 包围"
,因此任何可能混淆解析代码的字符都必须进行反斜杠转义。
'
解析代码对程序周围的 s不awk
感兴趣(它正在寻找匹配的"
)。
但是,美元符号很特殊(可能意味着定义别名的 shell 的第 7 个参数,这是一个愚蠢的想法),并且必须用反斜杠转义,例如\$7
。
然后是 count-on-fingers \"MB\" \" \"
,两个用引号括起来的字符串awk
,所有引号均使用反斜杠转义。
'
解析代码对程序周围的 s不awk
感兴趣(它正在寻找匹配的"
)。
最后,还有别名中的其他命令(这次只有| sort -n -u
,和,
最后,
结束引号 ( "
) 未使用反斜杠转义。
下次解析该字符串时,反斜杠就会消失:
walt@bat:~(0)$ alias bigopenfiles
alias bigopenfiles='sudo lsof / | awk '\''{if($7 > 1048576) print $7/1048576 "MB" " " $9 }'\'' | sort -n -u'
walt@bat:~(0)$
答案2
您必须关闭当前终端并打开一个新的终端窗口才能使.bash_aliases
文件生效。
或者简单地说. ~/.bash_aliases
。