作为练习,是否有一种方法可以在没有 echo 的情况下将字符串重定向到文件?目前我正在使用
echo "Hello world" > test.txt
我知道 cat
和 printf
。我的想法是
> test.txt <<<"Hello world"
当然这行不通,但也许可以用类似的命令?
有太多的方法可以讨论,但你可能并不关心。当然,你可以用黑客手段--strace bash,或者在 gdb 中运行 Bash,施展各种黑魔法。
实际上,你有两个完全不同的例子。<<<'string'已经在向文件写入字符串了。如果除了
printf、
echo和
cat` 之外还有其他可以接受的命令,你可以使用许多其他命令来实现类似 cat 的行为(sed、awk、tee 等)。
$ cp /dev/stdin ./tmpfooblah <<<'hello world'; cat tmpfooblah
hello world
或地狱,取决于你是如何编译 Bash 的。
$ enable -f /usr/lib/bash/print print; print 'hello world' >tmpfile
如果你只想在纯 Bash 中使用 Bash 字符串和重定向,没有黑客攻击,也没有可加载项,那是不可能的。但在 ksh93 中,这却是可能的。
$ rm tmpfooblah; <<<'hello world' >tmpfooblah <##@(&!()); cat tmpfooblah
hello world
在 bash 中的方法是
zsh <<< '> test <<< "Hello World!"'
这是 zsh 和 bash 之间有趣的区别之一:对于未链式的 >
或 >>
,zsh 会有意识地将其连接到 stdin,而 bash 则不会。 如果它是标准的,那就太有用了。
我试图用它来发送 & 通过 ssh 将我的 ssh 密钥附加到远程的 authorized_keys
文件,但远程主机当然是 bash,所以什么也没做。
这就是为什么你应该使用 cat
.