我的要求是:
我尝试过“通过 gmail 发送单行消息的最简单答案是使用 ssmtp”,以及几种变体,并不断得到:
笔记本电脑 sSMTP[19226]:授权失败(535 5.7.8 https://support.google.com/mail/?p=BadCredentials d13sm3920147qkj.27 - gsmtp)
谷歌设置:
对于我尝试的每个ssmtp.conf
设置,我之前已经完成了DisplayUnlockCaptcha :
$echo "Testing...1...2...3" | ssmtp myusername@gmail.com
Run Code Online (Sandbox Code Playgroud)
仅查看所述线程/etc/ssmtp/ssmtp.conf
,对于应如何设置尚未达成共识:
mailhub=smtp.gmail.com:587
VS 465UseTLS=YES
与UseSTARTTLS=Yes
(或两者?)hostname=localhost
与默认放置在那里的任何内容(在我的例子中,laptop
)有人可以提出解决这个问题的建议,并可能完整粘贴一个工作conf文件吗?
2017 年的一个帖子中有一个说法:
您无法使用普通密码使用外部应用程序,您必须访问https://security.google.com/settings/security/apppasswords
是这样吗?(我做不到)
还有哪些替代方案?
附:
考虑:
#!/bin/sh
while getopts ":h" o; do
case "$o" in
h )
"Usage:
sh $(basename "$0") -h Displays help message
sh $(basename "$0") arg Outputs ...
where:
-h help option
arg argument."
exit 0
;;
\? )
echo "Invalid option -$OPTARG" 1>&2
exit 1
;;
: )
echo "Invalid option -$OPTARG requires argument" 1>&2
exit 1
;;
esac
done
Run Code Online (Sandbox Code Playgroud)
这个调用返回not found
为什么?
$ sh getopts.sh -h
getopts.sh: 12: getopts.sh: Usage:
sh getopts.sh -h Displays help message
sh getopts.sh arg …
Run Code Online (Sandbox Code Playgroud) 显然我做得不对,但我认为预期的结果很明确(${#arr[@]}
=3)
$ readarray -d "\t" arr < <(printf "%s\t%s\t%s" "x" "y" "z"); echo "${#arr[@]}"
> 1
Run Code Online (Sandbox Code Playgroud) 我正在使用OS X 10.10.5
,当我尝试以下命令时:
$ ls foo*
foo123bar.pdf
$ for f in foo*; do echo "$f" | sed -E 's:foo:bar:';done
bar123bar.pdf
$ for f in foo*; do echo "$f" | sed -E 's:foo:(&):';done
(foo)123bar.pdf
$ for f in foo*; do echo "$f" | sed -E 's:\(foo\):(\1):';done
sed: 1: "s:foo:(\1):": \1 not defined in the RE
Run Code Online (Sandbox Code Playgroud)
我有一个错误。
我的问题是:如何纠正上面最后一个命令产生的错误?
我希望这会奏效:
$ find . -type f -exec basename {} \; | while EFS= read -r f; do echo "${f##[0-9]}"; done
Run Code Online (Sandbox Code Playgroud)
但是,例如,对于命名为:
1foo
11bar
它返回:
foo
1bar
什么时候
富
吧
是期待。
PS:归根结底,我要mv "$f"
修改名字(还要做其他修改)
编辑:
PS2:如果您考虑PS,它不是重复的。无论如何,标记为检查的答案让我满意。
我想在匹配*.pdf
的目录中循环匹配的文件[A-J]*
?
我不明白这个问题有什么不清楚的地方导致搁置。
第一次和第二次调用是为了比较。这是我试图开始工作的第三次。
$ ls -a1 *mp3
DaftPunk_VeridisQuo.mp3
French79_AfterParty.mp3
French79_BetweentheButtons.mp3
French79_Hometown.mp3
$ find . -maxdepth 1 -type f -name '*mp3'
./French79_AfterParty.mp3
./French79_Hometown.mp3
./DaftPunk_VeridisQuo.mp3
./French79_BetweentheButtons.mp3
$ for x in "$(ls -a *mp3)"; do mv "./$x" "./electro_$x"; done
mv: cannot stat './DaftPunk_VeridisQuo.mp3'$'\n''French79_AfterParty.mp3'$'\n''French79_BetweentheButtons.mp3'$'\n''French79_Hometown.mp3': No such file or directory
Run Code Online (Sandbox Code Playgroud) 我的问题是:一个管道可以/如何复合命令 ( { list; }
)?请参阅附件 B。附件 A 是为了进行比较而给出的。
附件一:
\n$ cat << EOF | xargs -n 1 echo \nfoo\nbar\nqux\nEOF\nfoo\nbar\nqux\n
Run Code Online (Sandbox Code Playgroud)\n附件B:
\n$ cat << EOF | xargs -n 1 sh -c \'{ var="$1"; echo "$var"; }\'\nfoo\nbar\nqux\nEOF\n\n\n
Run Code Online (Sandbox Code Playgroud)\nman sh
:
-c Read commands from the command_string operand\n instead of from the standard input. Special parame\xe2\x80\x90\n ter 0 will be set from the command_name operand and\n the positional parameters ($1, $2, etc.) set from\n …
Run Code Online (Sandbox Code Playgroud)