0

私はbashを使い始めたばかりなので、答えがはっきりしないことを願っています。次のようなplaylists.txtというファイルがあります。

  • ChilledDubstep PLYNrAD9Jn2WDwRrS_Uw6UR55K-c_s6EH4
  • クラシックPLYNrAD9Jn2WDWZFpIG3a2tkOBtdeNAbc6
  • ChilledOut PLYNrAD9Jn2WCfrUCoS22kn3pBX1XUFinE
  • SlickSlickSound PLYNrAD9Jn2WDmpu3gNVxIVO8bAiOcQkx7
  • アルバム、コンサートPLYNrAD9Jn2WD3BI8o5VjmSbhZgfYh5zaX

各行の最初の文字列を$nameに割り当て、2番目の文字列を$ hashに割り当て、それをscript.shに送信して、行数が将来増える可能性があることを認識して、すべての行に対してこれを再帰的に実行します。

私はこれを書きましたが、機能しません:これを使用する-> bashシェルで1つの文字列を複数の変数に分割する方法は?

while read name hash
do

        sh script.sh "$name" "$hash"

done < playlists.txt

代わりに何をすべきですか?前もって感謝します。

編集:みんなありがとう、それで私はこれに変更しました、それは読みやすいです。私はそれが私のエラーを解決するだろうと思ったが、まだそこにある...くそー。つまり、基本的に、script.shでは、最初の部分は次のとおりです。

cd ~/Music/Youtube\ Playlist/Playlists/$name

mv $HOME/Music/Youtube\ Playlist/Playlists/$name/TextRecords/lastoutput.txt $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt

ただし、シェルはエラーを返します。

mv: cannot stat `/home/kabaka/Music/Youtube Playlist/Playlists//TextRecords/lastoutput.txt': No such file or directory

つまり、プレイリストの名前があるべきところには何もありません。理由はわかりますか?現在のスクリプトの$nameと上記のスクリプトの$nameが同じではないためですか?$ hashでも同じことが起こっていることに注意してください。これは、URLに表示されるはずですが、空白です。

4

3 に答える 3

1

read name hash作業に近づいています。代わりに言ってくださいread line

while read name hash; do
    sh script.sh "$name" "$hash"
done < playlists.txt
于 2013-01-29T20:07:25.963 に答える
1
  1. パイプを使用して、echo コマンドの出力を入力ファイルとして使用できます。
  2. フラグ「-d」は、「カット」コマンドの区切り文字を定義します。

コードは次のとおりです。

while read line
do
    name=`echo $line|cut -f1 -d' '`
    hash=`echo $line|cut -f2 -d' '`
    sh script.sh $name $hash

done < playlists.txt

2 番目の質問: ファイルをディレクトリに移動する前に、ファイルが存在することを確認してください。次のように「mkdir -p」で作成できます。

mkdir -p $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt
于 2013-01-29T20:20:30.800 に答える
-1

あなたはほとんどそこにいて、これを行うにはいくつかの方法がありますが、典型的な解決策は

while read name hash
do
     sh script.sh $name $hash 
done < playlists.txt

IHTH

于 2013-01-29T20:08:32.770 に答える