我写了一个小的库函数来帮助我在脚本所有者不是root时退出:
#!/bin/bash
# Exit for non-root user
exit_if_not_root() {
if [ "$(id -u)" == "0" ]; then return; fi
if [ -n "$1" ];
then
printf "%s" "$1"
else
printf "Only root should execute This script. Exiting now.\n"
fi
exit 1
}
我在这里从另一个文件中调用它:
#!/bin/bash
source ../bashgimp.sh
exit_if_not_root "I strike quickly, being moved. But thou art not quickly moved to strike.\n You're not root, exiting with custom message."
输出是:
I strike quickly, being moved. But thou art not quickly moved to strike.\n You're not root, exiting with custom message.
如何才能正确显示换行符?
答案 0 :(得分:1)
只需使用echo -e
代替printf
答案 1 :(得分:1)
也许不要使用"%s"
而只是
printf "$1"
在这种情况下,最简单。
默认情况下,ANSI-C转义序列不会被视为字符串 - 它们与其他文字相同。表格
$'ANSI text here'
虽然会进行反斜杠替换。 (Ref.)
在您的情况下,由于您只是print
提供的格式化字符串,您可以将其视为格式字符串而不是参数。
答案 2 :(得分:1)
或正确引用字符串。您可以在带引号的字符串中使用文字换行符,也可以使用例如$'string'
引用语法。
答案 3 :(得分:0)
在该功能中,将行更改为
printf "%s\n" "$@"
并像这样调用函数
exit_if_not_root "text for line 1" "text for line2" "text for line 3"
printf
会将格式字符串重新用于您提供的任意数量的字符串。