想要创建此命令的别名
find . -name '*.sh' -exec chmod a+x '{}' \;
我在设置时无法转义单引号 别名
alias mx='find . -name '*.sh' -exec chmod a+x '{}' \;'
感谢任何帮助。
答案 0 :(得分:15)
您可以使用双引号:
alias mx="find . -name '*.sh' -exec chmod a+x {} \;"
编辑:此外,'
周围的单引号{}
不是必需的。
答案 1 :(得分:14)
你想要的是一个功能,而不是别名。
function mx {
find . -name '*.sh' -exec chmod a+x '{}' \;
}
这将具有别名所具有的相同效果,避免任何“创造性解决方案”开始工作,并且如果您需要灵活性,则更灵活。在这种情况下,这种灵活性的一个很好的例子是允许用户指定要搜索的目录,如果没有指定目录,则默认为当前目录。
function mx {
if [ -n $1 ]; then
dir=$1
else
dir='.'
fi
find $dir -name '*.sh' -exec chmod a+x '{}' \;
}
答案 2 :(得分:12)
其他答案在这个(大多数)情况下包含更好的解决方案,但是你可能因为某种原因真的想要逃避'
,你可以'"'"'
实际结束字符串,添加一个{ {1}}被'
转义并再次启动字符串。
"
的更多信息
答案 3 :(得分:1)
尝试
alias mx=$'find . -name \'*.sh\' -exec chmod a+x \'{}\' \\;'
来自man bash
:
$'string'形式的单词是专门处理的。单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符。反斜杠转义序列(如果存在)按如下方式解码:
\\ backslash
\' single quote
\" double quote
\n new line
...
参见示例:
echo $'aa\'bb'