「みんな教えて! 選手権!!」開催のお知らせ

ls -l bm.bash
ls -l 01rwr.fio
ls -l test.bash

file bm.bash
file 01rwr.fio
file test.bash
をヒアドキュメントを使って、
ls -l << --
bm.bash
01rwr.fio
test.bash
--

file << --
bm.bash
01rwr.fio
test.bash
--
みたいな書き方はできないのでしょうか?

質問者からの補足コメント

  • どう思う?

    例えば、
    debugfs $(mount | egrep ${MOUNTON} | awk '{print $1}') << -- >> ${i}.${BLOCKSIZE}.${FILESIZE}.${l}
    stat /${FILENAME}.1
    stat /${FILENAME}.2
    stat /${FILENAME}.3
    --
    のヒアドキュメントの記述は、debugfsの対話モードで、標準入力からstatコマンドが順次入力されていくのでOKという理解で良いでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/11/01 11:58

A 回答 (4件)

出来ません。

ヒアドキュメントは標準入力への入力です。コマンドラインに書くことと全く異なる概念です。

同じ結果になる、
echo a b c

cat <<XX
a b c
XX
の違いをよく考えましょう。

近いことをしようとすると、
ls -l $(cat <<XX
bm.bash
01rwr.fio
test.bash
XX
)
あるいは、
cat <<XX | xargs ls -l
bm.bash
01rwr.fio
test.bash
XX
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2022/11/02 00:16

> debugfsの対話モードで、標準入力から


はい。ヒアドキュメントは標準入力になります。
    • good
    • 0

「XY問題」になってませんか?


https://ja.wikipedia.org/wiki/XY%E5%95%8F%E9%A1%8C

ヒアドキュメントを使って、
ls -l << XX
bm.bash
01rwr.fio
test.bash
XX
と書くということは、スクリプト内に bm.bash以下が直に書いてある、ということですよね。

ls -l bm.bash 01rwr.fio test.bash
と横に長く書きたくない、というだけなら、\で継続行にして
ls -l \
bm.bash \
01rwr.fio \
test.bash
と書けます。

同じ引数を使い回ししたいのなら、配列変数が使えます
#declare -a aa #無くても使えるが、書いておくと配列に限定できる
aa=(
bm.bash
01rwr.fio
test.bash
)
ls -l "${aa[@]}"


-----
また、これとは別に、コマンドによっては、引数の代わりにファイルから読み取る方法が用意されていることがあります。
例えば、file コマンドには -fオプションでテスト対象をファイル読み取るように設定できます.このとき、ファイル名に - を指定すると標準入力が対象になります
file -f - << XX
bm.bash
01rwr.fio
test.bash
XX

----
ちなみに、xargsは「標準入力を引数に変換する」コマンドなので、
cat <<XX | xargs ls -l

xargs ls -l <<XX
で十分です。
    • good
    • 0
この回答へのお礼

確かに、xy問題になっていますね。
ただ、冗長でもヒアドキュメントでの書き方が知りたかったので^^;

お礼日時:2022/11/02 00:17

案1. 素直に


cat << -- | xargs file
bm.bash
01rwr.fio
test.bash
--

案2. lsとfileを同時に
for s in $(cat << --
bm.bash
01rwr.fio
test.bash
--
)
do
ls -l $s
file $s
done

案3. もう少し見やすく
while read s; do
ls -l $s
file $s
done << --
bm.bash
01rwr.fio
test.bash
--
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2022/11/02 00:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報