シェルスクリプト質問スレ
質問お願いしましす。 リモートで最新の1つを残してログを削除したいです。 $ ssh host 'rm -f `ls -1t /home/app/201910/*.log | tail -n+2`' これを複数のディレクトリで実行しようとしたのが、 var1=201909 var2=201910 array=($var1 $var2) for var in ${array[@]} do ssh host rm -f $(tail -n+2 $(ls -1t /home/app/${var}/*.log)) done なのですが、ls -1t /home/app/${var}/*.logがローカルで実行されてしまい ます。(ls: /home/app/201909/*.log: No such file or directory) うまくいくようにアドバイスなどいただけるとうれしいです。 女子高生です。 >>3 >質問お願いしましす。 お願いされても...特に質問はありません お願いされたから反応したのに、もげろってどういうことよ ビデオ(Totem)で曲4つをループして聴くシェルスクリプトを作ったのですが、1曲目だけで終わってしまいます。 以下ソースです #!/bin/bash while true do /usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/WinterSong.ogg ; /usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/世界中の誰よりきっと.mp3 ; /usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/サイレント・イヴ.ogg ; /usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/Itsuka no Merry Christmas.mp3 done どこがいけないんでしょうか・・・? 日本語のパス・ファイル名は、使えるの? .ogg/.mp3 も、両方とも使えるの? それと、あちこちに、echo `date` を入れて、時刻を見た方がよい do echo `date` /usr/bin/totem 何々 echo `date` /usr/bin/totem 何々 echo `date` done #cat test.sh line=aaa,bbb,ccc arr=($(IFS=,; echo $line)) echo ${arr[0]} echo ${arr[1]} echo ${arr[2]} #sh test.sh aaa bbb ccc と期待通りを結果を得られるのですが、これを # line=aaa,bbb,ccc # arr=($(IFS=,; echo $line)) # echo ${arr[0]} aaa bbb ccc # echo ${arr[1]} # echo ${arr[2]} # と1行ずつTeratermに張り付けて実行すると期待する結果を得られません。 なにが違うのでしょうか。 bash(1)にはgotoという文言は見えないが、gotoに類した命令ある? そういやシェルスクリプトにgotoがないっていうのは シェルスクリプト(のオリジナル)が作られた時期から見て 先見の明を持ってるんじゃねーか? 当時の言語はgotoはあって当然だったと思うんだが シェルスクリプトは完全逐次処理やろ。 gotoを実装するのはかなり難しいと思うが。 先見の明よりも、たんに面倒だったのでは。 逐次処理って、DOSのBATファイルじゃあるまいし。 つか、BATにすらGOTOあるのに。 また先頭から読み直すの? 当時のメモリの量を知らないわけでもあるまいに メモリは使ったら無くなるんですよ? 再起動しなければどんどん減っていきます。 と言ってるんだろ 大容量16KBのメモリしかないシステムでgotoを実現しようと思ったら スクリプトファイルを読み直す以外の対応はできないだろ その間にファイルが書き換わっていたらどうすんの? とか考えもせずに簡単とか言い出すようなバカには理解できなかったか gotoなんてアセンブラで2〜4バイト程度で実現できるやろ 16KBなんて広大だ MSXは16KBの機種もあってgotoがあるBASIC搭載ですが スクリプト?読み直す?何を言ってるんでしょうか? スクリプトスレで「スクリプト?」とか言い出すようなお爺ちゃんは黙っててくれよ >>20 だから何が言いたいんだ? 例えば、大容量640KBのメモリしかないDOSのBATファイルならスクリプトファイルを読み直してるんだろ。動作中にファイルが書き換わってたら、変わったように動作するんだから。 そんなの実現方法の一つに過ぎんだろ。 >>25 君みたいながさつな人間にはそんな仕様で問題ないのかもしれんが sh作った人はそうじゃなかったってことだよ >>25 お前はバッチファイル特有の話をしただけだったってことが真相かw >>26 sh作った人の志向であったというなら、ハナからそう言えばいい。 小メモリだとGOTOを実装できないなどという、知ったかぶりにも満たない妄言は要らない。 >>28 とりあえず、gotoを追加するパッチでも提出してこいよ? >>29 breakとかcontinueがそれ gotoの乱用を防ぐために、ループの開始と終わりにしか gotoできないようになってる >>30 それこそ、知ったかぶりにも満たない妄言なんしゃねえの?w >>31 どういう意味? breakとかcontinueは実際にジャンプしてるんだが? >>31 >>30 の言うことは正しい。 そもそも、WHILE、FOR は GOTO [後方] の亜種だし、IF THEN は本質的に IF GOTO だ。 つまり、GOTO が技術的理由で実現できなければ、全てのフロー制御は実現できない。というか、GOTO 機能自体は単なるマシン語命令なので、実現できない理由は特に無い。 言語の基礎知識レベルの話だが、これ等が知ったかぶりや妄言に聞こえるようでは、救いようが無いね。 GOTO禁止ブームや構造化プログラミングがでたのっていつなんだろう? シェルスクリプトにGOTOがないのはその話を踏まえた上の設計だよね? スクリプト言語の制御構造をマシン語命令とか言うバカ、初めて見た >>37 しかし、「有害論」の影響なのかどうかはわからない。 その後でも、gotoのある言語もない言語もあるわけで。 > Thompson Shell のデザインは、Multics の模倣を意図したものだった。 > プログラムの分岐処理で欠かせない if や goto といった語ですら、別々のコマンドとして実装されていた[1]。 って書いていたから当時はまだgotoあったんだな 改良するにつれてなくしたと POSIXシェルの前身であるBourne Shellでようやくgotoが消えたっぽい https://ja.wikipedia.org/wiki/Bourne_Shell read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる