如果需要,我想以一种使用sudo
的方式将内容附加到文件中,这是我目前所拥有的:
getAndAppend(){
# create file if doesn't exist, with right permission
[[ ! -s $2 ]] && touch "$2" || [[ ! -s $2 ]] && sudo touch "$2" # line 1
# append stuff to it
[[ -w $2 ]] && curl -sSL $1 >> $2 || sudo bash -c "curl -sSL $1 >> $2"
[[ -w $2 ]] && echo -e "\n" >> $2 || sudo bash -c "echo -e \"\n\""
}
file="~/.wot"
url="https://raw.github.com/n-marshall/system-setup/master/common/configs/.gitignore_global"
getAndAppend $url $file
但是第1行不起作用,输出类似于~/.wot: No such file or directory
当然,文件不存在,以下行无法正常工作。
我怎么能解决这个问题?谢谢 !当然欢迎任何其他评论或方法!
答案 0 :(得分:1)
file=~/.wot
或
file="$HOME/.wot"
引用防止波浪扩展。
顺便说一句 - 你可以做的比在每个需要向目标文件发出输出的命令前面抹灰sudo
做得更好。考虑:
# Note that this requires bash 4.1 for automatic FD allocation
# otherwise, modify it to hardcode a FD number for our backup.
withOutputToFile() {
local orig_stdout retval
exec {orig_stdout}>&1 || return
if ! exec >"$1"; then
if ! exec > >(sudo tee -- "$1"); then
exec >&$orig_stdout
return 1
fi
fi
shift
"$@"; retval=$?
exec >&$orig_stdout {orig_stdout}>&-
return "$retval"
}
这是一个满口的,当然,但是一旦你拥有它,你可以用它来包装任何功能:
getAndAppend() {
curl "$1" && printf '\n'
}
withOutputToFile /path/to/your/file getAndAppend http://example.com/