練習問題として、echoを使わずに文字列をファイルにリダイレクトする方法はありますか?現在、私は
echo "Hello world" > test.txt
catと
printf`については知っています。私は次のように考えています。
> test.txt <<<"Hello world"
もちろん、これはうまくいきませんが、似たようなコマンドがあるかもしれません。
おそらくあなたが気にしていないことを議論するには、あまりにも多くの方法があります。もちろん、ハックすることもできます - strace bash、または gdb で Bash を実行するあらゆる種類の黒魔術を行うことができます。
実際には、2つの全く異なる例があります。<<'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はセンスよくそれを標準入力に接続しますが、bashはそうしません。 これが標準であれば、非常に便利なのですが。
私はこれを使って、リモートの authorized_keys
ファイルに ssh で私の ssh キーを送信 & 追加しようとしましたが、リモートホストはもちろん bash で、静かに何もしませんでした。
これが、cat
を使うべき理由です。