質問: ### 前提・実現したいこと シェルスクリプトの練習をしています。 行いたいのは、カレントディレクトリ(/root/practice)にある.shファイルの頭3行だけのファイルを/root/practice/result下に同名.txtというファイル名で作成したい、です。 以下のソースコード実行時にエラーが表示されます。 リダイレクトしているため、.txtファイルが存在しない場合は新規作成されるかと思っていましたがエラーが表示されました。 なにが原因で、どうすればただしく実行されるでしょうか? ### 該当のソースコード .#!/bin/sh (#が見出しになってしまうので、無駄に.をつけました) mkdir result for file_name in /root/practice/*.sh do head -n 3 ${file_name} > /root/prctice/result/`basename ${file_name}.txt` done ### 発生している問題・エラーメッセージの例 ./heads.sh: line 5: /root/prctice/result/calc.sh.txt: そ のようなファイルやディレクトリはありません
回答: ``` basename ${file_name} ``` では、拡張子を含んだファイル名が得られます。 file_nameが、"calc.sh"だとすれば、質問に書かれているように動作するのが正常です。 ファイル名から.shという拡張子を取り除いたものが欲しいなら ``` basename ${file_name} .sh ``` とします。