4

私はLinuxコマンドを学んでおりls *、再帰を使用して、すべてのファイルとサブフォルダー内のファイルをリストする基本的なシェルスクリプトを練習して書き込もうとしています。

#!/bin/bash

# list-all: one command to list them all!!!!

listit () {
        if [ -d "$1" ]
        then
                listit "$1"
        else
                echo "$1"
        fi  
}

ls | while read items; do
        listit "$items"
done

ただし、結果は次のとおりです。

./list-all: line 16:  1101 Done                    ls
      1102 Segmentation fault: 11  | while read items; do
    listit "$items";
done

シェルが再帰を許可していないためですか?助けてください、ありがとう!

4

2 に答える 2

1

無限再帰でスタックをオーバーフローさせました。を呼び出すことを検討してくださいlistit /

最初はそれがディレクトリであることifがわかるので、それが呼び出され、次に呼び出されます.../listit /listit /

次に何が起こるかについては、この回答を参照してください。

于 2013-05-29T16:52:11.517 に答える