私は次のスクリプトを持っています:
#!/bin/bash
ls -1 | while read d
do
[[ -f "$d" ]] && continue
echo $d
cd $d
done
問題は、各CDに「[パス]:そのようなファイルやディレクトリはありません」と表示されていることです。なぜですか。私がリストしたのでフォルダが存在します...
私は次のスクリプトを持っています:
#!/bin/bash
ls -1 | while read d
do
[[ -f "$d" ]] && continue
echo $d
cd $d
done
問題は、各CDに「[パス]:そのようなファイルやディレクトリはありません」と表示されていることです。なぜですか。私がリストしたのでフォルダが存在します...
コードに2つの問題があります。
cd
と、そこにとどまります。これを試してください:
#!/bin/bash
ls -1 | while read d
do
test -d "$d" || continue
echo $d
(cd $d ; echo "In ${PWD}")
done
あなたはls
そのように使うべきではありません。
#!/bin/bash
for d in */
do
[[ ! -d "$d" ]] && continue
echo "$d"
cd "$d"
# do something
cd "$OLDPWD"
done
問題は、スクリプトの作業ディレクトリを変更することです。これは、2番目cd
が前に入力したサブディレクトリで実行されることを意味しますcd
。
dir=`pwd`
ls -1 | while read d
do
[[ -f "$d" ]] && continue
cd "$dir"
echo $d
cd $d
#....
done
何を達成しようとしているのかわからない。ある種の再帰的なdicトラバーサルを実行しますか?
これが私がやる方法です:
#!/bin/bash
CWD="$(pwd)" #save starting directory
ls -1 | while read d
do
[[ ! -d "$d" ]] && continue
cd "$d"
echo "Changed to directory" $d
#Now you can do someting in the sub-directory
cd "$CWD" #Change back to old directory
done