2013-10-12 26 views
1

請注意,即將發佈的代碼有目的地不完美,如果目錄中存在文本文件,但完整的代碼確實有這樣的檢查,將無法工作。但問題是,這樣的:通過unix bash腳本問題進入目錄

#!/bin/bash 
for d in *; do 
    cd $d 
done 

生產:

./test: line 3: cd: 500: No such file or directory 
./test: line 3: cd: 536: No such file or directory 
./test: line 3: cd: 560: No such file or directory 
./test: line 3: cd: 572: No such file or directory 
./test: line 3: cd: out.txt: No such file or directory 
./test: line 3: cd: prob1: No such file or directory 
./test: line 3: cd: problem2: No such file or directory 
./test: line 3: cd: README: No such file or directory 
./test: line 3: cd: test: No such file or directory 

,其中500,536,560,和572的目錄,應該能夠被打開。如果我只是做一個CD 500,那麼我可以進入目錄沒有問題。但是當我在shell腳本中使用自動化過程時,它不起作用。

好了等以後再進入節目我現在有:


#!/bin/bash 
cd "$1" 
for d in */; do 
    (
     cd "$d" 
     for file in $*; do 
     (
       bla="$(head -4 $file|tail -1)" 
       cd ~cfb43/cs265/a1 
       echo $bla > out.txt 
       cd 
       cd "$1" 
       cd "$d" 
     ) 
     done 
     cd "$1" 
    ) 
done 

,我得到:


head: error reading `/home/cfb43/cs265/a1': Is a directory 
head: error reading `/home/cfb43/cs265/a1': Is a directory 
head: error reading `/home/cfb43/cs265/a1': Is a directory 
head: error reading `/home/cfb43/cs265/a1': Is a directory 
head: error reading `/home/cfb43/cs265/a1': Is a directory 

所有我想要做的就是去到一個目錄,並從文件中讀取和獲取第四行文本並將其打印到我的文件夾中的out.txt文件中。我不知道爲什麼這個代碼被卡住在a1而不是至少500或類似的東西。任何進一步的幫助,我會非常感謝

回答

5

因爲您嘗試進入下一個子目錄而不離開前一個。你可以做

#!/bin/bash 
for d in */; do 
    cd -- "$d" 
    # do some stuff 
    cd .. 
done 

,或者使用一個子shell

#!/bin/bash 
for d in */; do 
    (
     cd -- "$d" 
     # do some stuff 
    ) 
done 
+0

你可能會看看問題的新部分,因爲你說的是​​什麼工作,但導致了新的問題。你爲什麼要在cd命令中使用「 - 」? –

+0

@ColanBiemer'--'用於保證如果目錄名以'-'開頭(例如'-mydir'),它不會被解釋爲cd命令的選項,而是作爲目錄名。關於你的新錯誤消息,它看起來像你在目錄上調用'head'。你應該檢查operant是否是一個帶有if [[-f「$ file」]]''的常規文件。 – user000001

1

是你知道自己在做什麼:$ *,它擴展爲參數$ 1 $ 2 .. $

for file in $*; do 
{#!}

也許你想要:*擴展到當前目錄中的文件

for file in *; do 

另一種方法是永遠不會改變的目錄:

for file in */*;do 
    head -4 "$file" | tail -1 >> ~cfb43/cs265/a1/out.txt 
done 

和另一種方法做

head -4 | tail -1 

與sed的

​​

使用awk

awk 'NR==4{print;exit}' 

與perl

perl -ne 'if($.==4){print;exit}' 
+0

當我做到了,我得到了頭:無法打開「*」的閱讀:沒有這樣的文件或目錄,然後我不得不退出它 –