Bash:使用函数参数创建名称文件

时间:2016-09-02 16:09:02

标签: bash

如果需要,我想以一种使用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 当然,文件不存在,以下行无法正常工作。

我怎么能解决这个问题?谢谢 !当然欢迎任何其他评论或方法!

1 个答案:

答案 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/