2

テキストファイルから読み取ってコマンドを実行しようとしましたが、失敗しました。まったく同じ行を入力すると、うまくいきます。移動コマンドを実行しようとしても、「ファイルまたはディレクトリが見つかりません」というエラーメッセージが表示されたことに驚いています。明らかに、エラーメッセージはここで真実を語っていません。誰かがそれを説明できますか?

s39339@compute:~/spr/man/de$ head -n7 mkdoc|tail -n1
mv nutzer.1.gz ~/public_html/man/man1/
s39339@compute:~/spr/man/de$ `head -n7 mkdoc|tail -n1`
mv: Verschieben von „nutzer.1.gz“ nach „~/public_html/man/man1/“ nicht möglich: Datei oder Verzeichnis nicht gefunden
s39339@compute:~/spr/man/de$ ls
gzip  mkdoc  nutzer.1  nutzer.1.gz  nutzer.pod  rbsh
s39339@compute:~/spr/man/de$ mv nutzer.1.gz ~/public_html/man/man1/
s39339@compute:~/spr/man/de$

私は学校のためにこれをやっているので、答えはいいでしょう。結果に到達する方法は問題ではありませんが、私が試したことはあまり必要ないように思えます。

4

2 に答える 2

2

`head -n7 mkdoc|tail -n1`は、コマンドの出力である に置き換えられmv nutzer.1.gz ~/public_html/man/man1/ます。この出力は、コマンド、コマンドとして解釈されmvます。

ただし、チルダ展開が既に実行されているため、失敗します。~この時点ではホーム ディレクトリに置き換えられません。それは単純なチルダ文字です。実行しようとしたかのように

'mv' 'nutzer.1.gz' '~/public_html/man/man1/'

$HOME同じ理由で、またはバッククォートの 2 番目のセット、またはその他の動的構造を使用することはできません。そのためには、 を使用するevalか、文字列を 2 番目のシェルに渡す必要があります。

eval `head -n7 mkdoc|tail -n1`
bash -c "`head -n7 mkdoc|tail -n1`"
于 2010-11-12T02:55:38.833 に答える
1

チルダ "~" は、バッククォート内で補間されません。

[編集] 代わりに使用できるはずです: eval "$(head -n7 mkdoc|tail -n1)"

于 2010-11-12T02:54:56.977 に答える