【问题标题】:How to install a bash function containing variables using a bash script? [duplicate]如何使用 bash 脚本安装包含变量的 bash 函数? [复制]
【发布时间】:2017-05-20 08:12:52
【问题描述】:

我正在尝试创建一个 bash 脚本,它允许我在多台机器上安装相同的 bash 功能。这个特殊的函数在备份目录中创建一个带有时间戳的文件的副本:

filebackup () { cp "${@}" ~/"filebackup/${@}_$(date +%Y-%m-%d_%H:%M:%S).bk"; }

这是我的 bash 脚本:

cat <<EOT >> ~/.bashrc
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# create a file backup in ~/filebackup/ with timestamp
filebackup () { cp "${@}" ~/"filebackup/${@}_$(date +%Y-%m-%d_%H:%M:%S).bk"; }
EOT

source ~/.bashrc

但是,当我执行脚本时,${@} 丢失,$(date +%Y-%m-%d_%H:%M:%S) 已被评估。以下是 .bashrc 文件的附加内容:

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# create a file backup in ~/filebackup/ with timestamp
filebackup () { cp "" ~/"filebackup/_2017-01-05_12:07:56.bk"; }

如何确保函数被逐字复制到文件中?

【问题讨论】:

  • 在第 1 行引用 "EOT"(但不在第 6 行)。
  • @thatotherguy 按下简易按钮这很容易!谢谢!
  • @DanFarrell 我觉得我在搜索类似问题时非常彻底......作为一个新用户,另一个问题中的术语不是我熟悉的,因此永远不会找到它!
  • 没关系@AlexWillison,投票结束并不是反对票。然而,这个问题是重复的。
  • AlexWillison 完全可以。确实很难找到重复项,因为 google 和 stackoverflow 都不擅长搜索符号,而且您基本上必须知道找到重复问题的答案是什么:P

标签: bash function variables scripting backup


【解决方案1】:

此处的文档被视为双引号字符串,因此在从它们读取命令之前评估参数扩展和命令替换。引用分隔符的任何部分以将此处的文档视为单引号字符串。

cat <<\EOT >> ~/.bashrc
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# create a file backup in ~/filebackup/ with timestamp
filebackup () { cp "${@}" ~/"filebackup/${@}_$(date +%Y-%m-%d_%H:%M:%S).bk"; }
EOT

对于任何部分,我的意思是以下任何一个都可以正常工作:

  • 'EOT'
  • E\OT
  • "E"OT

等等。

【讨论】:

  • 非常感谢您的详细解释。
【解决方案2】:

@thatotherguy 在评论中建议:在第 1 行引用“EOT”(但不在第 6 行)。

cat <<"EOT" >> ~/.bashrc
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# create a file backup in ~/filebackup/ with timestamp
filebackup () { cp "${@}" ~/"filebackup/${@}_$(date +%Y-%m-%d_%H:%M:%S).bk"; }


EOT

source ~/.bashrc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2021-01-07
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多