我是 Linux 新手,仍在尝试理解基本命令。我的老师刚刚给了我们一些练习,让我们尝试自己完成 - 其中之一是创建一个名为 hello.sh 的文件并向其中添加几行文本。为此,我将以下代码写入 MobaXterm 中:
touch hello.sh
echo "Hello $LOGNAME\!" > hello.sh
Run Code Online (Sandbox Code Playgroud)
然后我还想添加一些其他回显命令,但在输入第一个“回显”命令后,我的终端立即显示
-bash: hello.sh: 无法覆盖现有文件
这里发生了什么?我对 .txt 文件做了类似的事情,它似乎有效。问题是由于文件类型引起的还是我只是搞乱了命令?(另外,如果我使用了错误的标签,我很抱歉 - 不确定什么最适合这个问题。)
谢谢你的帮助!
noclobber
我经常在脚本中使用该选项。它更改了 的默认行为>
,通常会截断已存在的文件,以执行您所看到的操作。它仍然会创建一个新文件,但不会破坏现有内容。
要添加到现有文件,请使用>>
. 如果您想截断包含预先存在内容的文件,请使用>|
. 即使已noclobber
设置,这些始终有效。如果文件尚不存在,两者也会创建一个新文件。
touch
创建了一个空文件,因此noclobber
不会让您写入它,因为它已经存在。
$: ls foo # no such file exists
ls: cannot access 'foo': No such file or directory
$: echo hello > foo # create it and add content
$: ls -l foo
-rw-r--r-- 1 P2759474 1049089 6 Jun 3 08:14 foo
$: cat foo
hello
$: echo world > foo # TRUNCATES and adds new content
$: ls -l foo
-rw-r--r-- 1 P2759474 1049089 6 Jun 3 08:14 foo
$: cat foo
world
$: rm foo
$: ls foo
ls: cannot access 'foo': No such file or directory
$: set -o noclobber # set > as nondestructive
$: echo hello > foo # still creates new file
$: ls -l foo
-rw-r--r-- 1 P2759474 1049089 6 Jun 3 08:15 foo
$: cat foo
hello
$: echo world > foo # now will not destroy existing data
bash: foo: cannot overwrite existing file
$: echo world >> foo # but >> appends
$: ls -l foo
-rw-r--r-- 1 P2759474 1049089 12 Jun 3 08:15 foo
$: cat foo
hello
world
$: echo gone >| foo # *explicitly* truncate and add new data
$: ls -l foo
-rw-r--r-- 1 P2759474 1049089 5 Jun 3 08:16 foo
$: cat foo
gone
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4983 次 |
最近记录: |