このスクリプトの名前はhelloです。
for i in $(ls $*);do
x=$(echo $(basename $i".md"));
pandoc $i -t "latex" -o $x.pdf;
done
私がこれを書くとき
$ ./hello *bye.md
このエラー
ls: cannot access 'test': No such file or directory
ls: cannot access 'de': No such file or directory
ls: cannot access 'bye.md': No such file or directory
basename: extra operand ‘bye.md’
Try 'basename --help' for more information.
./hello: 2: ./hello: pandoc: not found
basename: extra operand ‘.md’
Try 'basename --help' for more information.
./hello: 2: ./hello: pandoc: not found
私のスクリプトhelloが正しく機能しない理由を理解できませんか?
そして、次のコマンドは正しいディレクトリにpdfを生成しません。
$ ./hello */test.md
ベストアンサー1
set -x
実行中のコマンドを正確に示すコマンドを使用してスクリプトをデバッグできます。を使用してこのモードを無効にできますset +x
。これにより、存在しないファイルでループを実行してbasename
誤って実行されることがわかります。
また:
lsの出力を解析しないでください。。
for i in "$@"; do
それはあなたにとてもよく合います。basename
拡張子は別の引数として必要なので、次のように書く必要がありますbasename $i ".md"
。ファイル名を含む変数と拡張子の間にスペースはありません。変数にスペースが含まれている場合は、引用符で囲む必要があります。実際に欲しい
basename "$i" .md
pandoc "$i" -t "latex" -o "$x".pdf
これは
echo
重複します。x=$(basename "$i" .md)