我有一个要附加一些内容的文件(包括下面我的代码中可见的第一个、第二个和第三个空格):
###我是文字1 ###我是文字2
(我附加的实际文本比这 5 行长得多)。
为了简单地将内容附加到文件中,我这样做:
cat <<-"EOF" >> myPath/myFile
content...
EOF
但是,我如何确保仅当文件中不存在内容时,heredocument 才会附加内容,否则操作将被中止?
如果文件中仅存在部分块内容,则也应中止整个操作。
我有一个要附加一些内容的文件(包括下面我的代码中可见的第一个、第二个和第三个空格):
###我是文字1 ###我是文字2
(我附加的实际文本比这 5 行长得多)。
为了简单地将内容附加到文件中,我这样做:
cat <<-"EOF" >> myPath/myFile
content...
EOF
但是,我如何确保仅当文件中不存在内容时,heredocument 才会附加内容,否则操作将被中止?
如果文件中仅存在部分块内容,则也应中止整个操作。
如果仅在不存在此处文档时才应添加此处文档,则可以使用
grep
:要理解这一点,请考虑以下内容。
grep -F -q -f myPath/myFile{.append,}
由外壳扩展为grep -F -q -f myPath/myFile.append myPath/myFile
.该
grep
命令搜索myPath/myFile
(必要时应添加文本的文件-F
)包含在myPath/myFile.append
(包含要添加的文本的文件)中的任何固定字符串 ( ),每行读取一个模式 (-f
),并指示它是否仅通过它的退出代码,没有输出(-q
)。然后结果是 negated
!
,因此只有在没有找到任何东西时才运行if
块的部分。then
grep
请不要点赞这个答案,但斯蒂芬的答案是我标记为正确的。这只是我更容易阅读的一种变体。
如果模板文件的内容只应附加到结束文件中,如果最终文件中没有任何内容,则可以使用
grep
:该
grep
命令搜索包含在 中myPath/endFile.sh
的任何固定字符串 ( ) ,每行读取一个模式 ( ),并指示它是否仅通过其退出代码找到任何模式,没有输出 ( )。-F
myPath/myTemplate
-f
-q
然后结果为 negated
!
,因此只有在与最终文件中的任何内容都不匹配时才会执行该then
块的块。if-then
grep
附录 - 退出代码:
当一个进程退出时,它返回一个退出代码,它是一个小整数。按照惯例,退出代码 0 表示成功,非零表示失败或错误:
grep
找到匹配项时返回 0,否则返回 1。if
使用其参数的退出代码来决定做什么;如果为 0,则处理该then
块,否则处理该else
块(如果有)。标点符号 (
!
) 翻转;该then
块仅在 grep 不匹配任何内容(或遇到错误)时运行。