シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
シェルスクリプト総合 その32
レス数が1000を超えています。これ以上書き込みはできません。
2019/10/25(金) 00:08:45.53ID:6btPTvif
2019/10/25(金) 00:09:51.40ID:6btPTvif
・特記なき場合、POSIX準拠シェルが既定です
POSIX準拠シェルとBourneシェルの区別はついていますか?BourneシェルはUNIXで過去広く使われたシェルで
多くの亜種が存在します。Bourneシェルの後継で標準化されたものがPOSIX準拠シェルです
参考 https://unix.stackexchange.com/questions/145522/
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
特定のシェル(特にPOSIX準拠シェルではないfish, (t)csh等)の専用機能に依存する場合は明示しましょう
・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
Debian,Ubuntu … dash
CentOS … bash
FreeBSD … ash
Solaris,OpenBSD … ksh
macOS … 改変版bash
android … mksh
自覚なきbashism、シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?#!/bin/shを使うならシェル依存は厳禁です
macOSのbashはSingle UNIX Specificationに準拠するために改変されており一部動作が異なるので注意しましょう
・Bourneシェルは既にレガシーです
歴史的資料 https://www.in-ulm.de/~mascheck/
Bourneシェル≒Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
・POSIXに準拠しましょう
有用なリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
最新の仕様はこちら http://pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」から)
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
aproposやman -kでそれらしい単語による簡単な検索もできます
・ワイルドカードは正規表現ではありません
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
POSIX準拠シェルとBourneシェルの区別はついていますか?BourneシェルはUNIXで過去広く使われたシェルで
多くの亜種が存在します。Bourneシェルの後継で標準化されたものがPOSIX準拠シェルです
参考 https://unix.stackexchange.com/questions/145522/
POSIX準拠シェルは(d)ash, bash, zsh, (m)ksh, yash, posh, (p)boshです
特定のシェル(特にPOSIX準拠シェルではないfish, (t)csh等)の専用機能に依存する場合は明示しましょう
・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
Debian,Ubuntu … dash
CentOS … bash
FreeBSD … ash
Solaris,OpenBSD … ksh
macOS … 改変版bash
android … mksh
自覚なきbashism、シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?#!/bin/shを使うならシェル依存は厳禁です
macOSのbashはSingle UNIX Specificationに準拠するために改変されており一部動作が異なるので注意しましょう
・Bourneシェルは既にレガシーです
歴史的資料 https://www.in-ulm.de/~mascheck/
Bourneシェル≒Version 7 UNIXのshに一番近いのはOpenSolaris由来のHeirloom Bourne Shell、次点でSchily Bourne Shellのoboshです
Heirloom Bourne Shell: sh http://heirloom.sourceforge.net/sh.html
Schily Bourne Shell: obosh http://schilytools.sourceforge.net/bosh.html
・POSIXに準拠しましょう
有用なリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
最新の仕様はこちら http://pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」から)
・csh/tcshでのシェルスクリプトは*まったく推奨しません*
参考 http://www.speech-lab.org/~hiroki/csh-whynot.euc
・Linux/UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。Manページや各種リンクを見ましょう
aproposやman -kでそれらしい単語による簡単な検索もできます
・ワイルドカードは正規表現ではありません
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
2019/10/25(金) 00:10:25.47ID:6btPTvif
関連スレ
【Bash】Windows Subsystem for Linux【WSL】6
https://mao.5ch.net/test/read.cgi/linux/1560665525/
Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
【Bash】Windows Subsystem for Linux【WSL】6
https://mao.5ch.net/test/read.cgi/linux/1560665525/
Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
2019/10/25(金) 00:31:55.29ID:pN2Np6rx
隣で仕事してる他社のチームが、新人にコマンドプロンプトのことをMS-DOSって教えてて笑える
2019/10/25(金) 02:33:05.14ID:IsBuDbrd
業界内で技術用語を正確に把握している人が果たして何人いるんだろうか?
2019/10/25(金) 15:16:28.60ID:L9QL6FGO
コマンドプロンプトのことをなんと教えるか?
× MS-DOSのようなもの
○ ハドソンのゲーム、バニーガール殺人事件のようなもの
https://middle-edge.jp/articles/bFwpM
× MS-DOSのようなもの
○ ハドソンのゲーム、バニーガール殺人事件のようなもの
https://middle-edge.jp/articles/bFwpM
2019/10/25(金) 18:14:14.63ID:ggZuLyhL
Win9xまではコマンドプロンプトのアイコンがMSDOSだったんだぜ
8デフォルトの名無しさん
2019/10/25(金) 19:44:43.63ID:f89Z34lq あれって MS-DOS プロンプトって名前じゃなかった?
Windows NT の方はコマンドプロンプト。
Windows NT の方はコマンドプロンプト。
2019/10/25(金) 21:05:38.68ID:AWtm0G4L
先輩がコマプロとか言っててキモかったな(´・ω・`)
2019/10/25(金) 21:16:19.65ID:Qd2+OiXZ
そういう誰も効かない変な略し方ってどうやって生まれるんだろうね?
俺の知り合いは、AMDをアーマーデーとか言ってた。なんで伸ばすん?
俺の知り合いは、AMDをアーマーデーとか言ってた。なんで伸ばすん?
11デフォルトの名無しさん
2019/10/25(金) 23:38:51.04ID:9ZGj0mXw ドイツ語読みだとしてもマーがおかC
2019/10/25(金) 23:59:50.22ID:6xV0MpQs
そういえばもうDOSプロンプトって言い方しなくなったな
2019/10/26(土) 00:00:29.42ID:hrL9FWKp
XP以降しか使ったことがないって人も増えたからね
2019/10/26(土) 16:02:34.81ID:5U6kcXeJ
MS-DOS の話をしても現在の Windows で再現できないという理由で嘘つき呼ばわりされる。
15デフォルトの名無しさん
2019/10/26(土) 16:33:49.92ID:+M+pJ73c TRUE=$([ 0 = 0 ];echo $?)
FALSE=$([ ! $TRUE ];echo $?)
FLAG=$TRUE or $FALSE
↑クソコード
理由
true / false を使えばいい
true / false がない環境があるかもという理屈なら、 [ がない環境もあるかもと考えろ
set -e のときに動かない
[ ! $FALSE ]; echo $? が 1($FALSEと同じ値)を返すことに気づいていない
サブシェルを使うのもアホらしい
たったこれだけのコードに、こんだけのツッコミができるとはw
FALSE=$([ ! $TRUE ];echo $?)
FLAG=$TRUE or $FALSE
↑クソコード
理由
true / false を使えばいい
true / false がない環境があるかもという理屈なら、 [ がない環境もあるかもと考えろ
set -e のときに動かない
[ ! $FALSE ]; echo $? が 1($FALSEと同じ値)を返すことに気づいていない
サブシェルを使うのもアホらしい
たったこれだけのコードに、こんだけのツッコミができるとはw
16デフォルトの名無しさん
2019/10/26(土) 16:35:45.72ID:+M+pJ73c TRUE=0
FALSE=1
と書いたほうが遥かにマシだが、
これでも、[ $TRUE ] も [ $FALSE ] も共に 0(成功)を返すので
なんだかなーって感じw
FALSE=1
と書いたほうが遥かにマシだが、
これでも、[ $TRUE ] も [ $FALSE ] も共に 0(成功)を返すので
なんだかなーって感じw
17デフォルトの名無しさん
2019/10/26(土) 16:38:37.76ID:+M+pJ73c18デフォルトの名無しさん
2019/10/26(土) 16:49:43.23ID:+M+pJ73c 変数($FLAG)に、0 or 1 を入れてる人は、
こういう書き方をしたいかんのやで
if [ $FLAG ]; then
if [ ! $FLAG ]; then
if [ $FLAG -eq $TRUE ]; then とか
if [ $FLAG -ne $TRUE ]; then って書かないといかん
こういう書き方をしたいかんのやで
if [ $FLAG ]; then
if [ ! $FLAG ]; then
if [ $FLAG -eq $TRUE ]; then とか
if [ $FLAG -ne $TRUE ]; then って書かないといかん
2019/10/26(土) 17:19:51.21ID:swDBEFOl
if $FLAG ; then
書き方も知らんらしいw
書き方も知らんらしいw
20デフォルトの名無しさん
2019/10/26(土) 20:30:57.76ID:+M+pJ73c 0: コマンドが見つかりません
www
www
21デフォルトの名無しさん
2019/10/26(土) 21:19:29.63ID:axNoNf0W22デフォルトの名無しさん
2019/10/26(土) 21:55:28.23ID:NL9ts++52019/10/26(土) 23:37:13.88ID:9r5pzvRl
いつものとっちゃんが来てたのか
24デフォルトの名無しさん
2019/10/26(土) 23:42:04.85ID:Mu/CRk1W 0: コマンドが見つかりません
を確かめようと、WSLで実行したらエラー無く実行されたw
/mnt/c/WINDOWS/system32/0
というファイルが有る。
サイズゼロだから問題ないが、なんだこれw
ちなみに1はないのでエラーになる
を確かめようと、WSLで実行したらエラー無く実行されたw
/mnt/c/WINDOWS/system32/0
というファイルが有る。
サイズゼロだから問題ないが、なんだこれw
ちなみに1はないのでエラーになる
2019/10/27(日) 12:52:55.51ID:HgLbCoih
>>9
DECのVAX上で動くシェルスクリプトのようなものでコマプロってあったな
先輩からはコマンドプロシジャーの略って聞いたけど
今調べると「DCL および MCR コマンド言語インタプリタ」って言うのっぽい
適当にぐぐって出てきたPDFに載ってるそれらしい用語だけどさ
20年以上前の話だ、なつかしい・・・
DECのVAX上で動くシェルスクリプトのようなものでコマプロってあったな
先輩からはコマンドプロシジャーの略って聞いたけど
今調べると「DCL および MCR コマンド言語インタプリタ」って言うのっぽい
適当にぐぐって出てきたPDFに載ってるそれらしい用語だけどさ
20年以上前の話だ、なつかしい・・・
2019/10/27(日) 23:45:43.77ID:seZQk3at
質問スレでこっちでやれってレスもらったのできました。
そのまま同じ書き込みします。
↓
リモートで最新の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)
うまくいくようにアドバイスなどいただけるとうれしいです。
そのまま同じ書き込みします。
↓
リモートで最新の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)
うまくいくようにアドバイスなどいただけるとうれしいです。
2019/10/28(月) 00:08:46.94ID:+rzOrIi/
rm以降をクウォートしてないからじゃないの?
2019/10/28(月) 00:11:36.36ID:UoBv9hmi
ssh host 'ls -1t /home/app/'${var}'/*.log | tail -n +2 | xargs rm -f'
とか
とか
2019/10/28(月) 00:25:54.20ID:IRy7CIwD
クォートと中なら、平気、なの
2019/10/28(月) 00:28:19.46ID:XocDEeOH
この程度でいちいちbash依存しないでほしい
set -- 201909 201910
for var in $@
set -- 201909 201910
for var in $@
2019/10/28(月) 00:34:13.46ID:UoBv9hmi
for loop の場合、デフォルトでは "$@" が対象になるので
for var;do ... ;done
と書ける
for var;do ... ;done
と書ける
2019/10/28(月) 00:48:08.79ID:h0m+PRW8
2019/10/28(月) 00:49:49.60ID:+rzOrIi/
2019/10/28(月) 00:50:45.01ID:UoBv9hmi
$HOME/.ssh/config に RequestTTY とか書いてない?
2019/10/28(月) 01:18:31.93ID:h0m+PRW8
考えてくれて、レスをくれてありがとうございます。
>>28>>31
for var;do ssh host 'ls -1t /home/app/'${var}'/*.log | tail -n +2 | xargs rm -f' ;done
hoge.sh: 行 38: 予期しないトークン `done' 周辺に構文エラーがあります
をリモート側が返しました。
>>33
+ ssh host 'rm -f $(tail -n+2 $(ls -1t /home/app/'"${var}"'/*.log))'
bash: 警告: command substitution: ignored null byte in input
bash: /bin/rm: 引数リストが長すぎます
>>34
リモートには~/.ssh/configは無くて、ローカルはUser、HostName、Port、
IdentityFile、ServerAliveIntervalを書いてます。
取り急ぎ報告します。エラーについては調べてみます。
>>28>>31
for var;do ssh host 'ls -1t /home/app/'${var}'/*.log | tail -n +2 | xargs rm -f' ;done
hoge.sh: 行 38: 予期しないトークン `done' 周辺に構文エラーがあります
をリモート側が返しました。
>>33
+ ssh host 'rm -f $(tail -n+2 $(ls -1t /home/app/'"${var}"'/*.log))'
bash: 警告: command substitution: ignored null byte in input
bash: /bin/rm: 引数リストが長すぎます
>>34
リモートには~/.ssh/configは無くて、ローカルはUser、HostName、Port、
IdentityFile、ServerAliveIntervalを書いてます。
取り急ぎ報告します。エラーについては調べてみます。
2019/10/28(月) 01:42:31.88ID:h0m+PRW8
bash: /bin/rm: 引数リストが長すぎます
についてはしかたないので>>28さんのパイプを使うことにしました。
/dev/tty を読み込むために開けませんでした
についてはsshにtオプションをつけました。
`done' 周辺に構文エラーはこれから調べます。
とりあえず当初の目的は達成できました。
みんな親切にありがとうございます。
についてはしかたないので>>28さんのパイプを使うことにしました。
/dev/tty を読み込むために開けませんでした
についてはsshにtオプションをつけました。
`done' 周辺に構文エラーはこれから調べます。
とりあえず当初の目的は達成できました。
みんな親切にありがとうございます。
2019/10/28(月) 13:32:08.60ID:S2HNyEoD
curl ja.wttr.in/tokyo
curl cheat.sh/ls
これ以外に端末で使える便利サイトってある?
curl cheat.sh/ls
これ以外に端末で使える便利サイトってある?
2019/10/28(月) 13:35:16.78ID:tEsfLTI+
宣伝おつ
39デフォルトの名無しさん
2019/10/29(火) 09:50:33.80ID:zCzSjgo7 sshを複数回動かすよりも一回で全部やらせちゃった方が効率良いような気がするんだ
2019/10/29(火) 11:14:16.19ID:2AEjd6SF
なにそれ、よさそう。
でもわたしの頭ではどうしたらよいものやら。。
でもわたしの頭ではどうしたらよいものやら。。
41デフォルトの名無しさん
2019/10/29(火) 12:20:30.44ID:zCzSjgo7 forのループごとsshで引き渡せばいいじゃん。1行の長いシェルスクリプトってことね。
2019/10/29(火) 13:55:53.48ID:2AEjd6SF
まだ帰宅していないので考えただけですが、
ls | tail | rm したいディレクトリが11個あって、
ディレクトリのpwdは/home/'"$var"'/'"$i"'/ みたいに2箇所変数にしてます。
それをssh1行でループを送れるバエた方法があるますか?
ls | tail | rm したいディレクトリが11個あって、
ディレクトリのpwdは/home/'"$var"'/'"$i"'/ みたいに2箇所変数にしてます。
それをssh1行でループを送れるバエた方法があるますか?
2019/10/29(火) 13:59:15.42ID:2AEjd6SF
たしかにsshのループの時にいちいち
Connection to xxx.xxx.xxx.xxx closed
が出てうざかったんですよね。
Connection to xxx.xxx.xxx.xxx closed
が出てうざかったんですよね。
2019/10/29(火) 14:00:01.92ID:gns1i7FP
ヒアドキュメントにすればいいんじゃない
#!/bin/sh
cat <<'EOS' | ssh host sh
var1=201909
var2=201910
set -- "${var1}" "${var2}"
for var
do
ls -1t /home/app/"${var}"/*.log | tail -n +2 | xargs rm -f
done
EOS
#!/bin/sh
cat <<'EOS' | ssh host sh
var1=201909
var2=201910
set -- "${var1}" "${var2}"
for var
do
ls -1t /home/app/"${var}"/*.log | tail -n +2 | xargs rm -f
done
EOS
2019/10/29(火) 14:19:01.08ID:gns1i7FP
と思ったけど、リモートホストのどこかにスクリプトファイルを置いて
ssh host /path/to/script
とかやればいいんじゃないかな
> たしかにsshのループの時にいちいち
> Connection to xxx.xxx.xxx.xxx closed
> が出てうざかったんですよね。
なんでこのメッセージが表示されるんだろう…やっぱり pseudo tty を
使ってるよね
ssh host /path/to/script
とかやればいいんじゃないかな
> たしかにsshのループの時にいちいち
> Connection to xxx.xxx.xxx.xxx closed
> が出てうざかったんですよね。
なんでこのメッセージが表示されるんだろう…やっぱり pseudo tty を
使ってるよね
2019/10/29(火) 14:32:50.27ID:CowX2GWO
CI/CD で使う、Task Runner みたいな方が良いかも
Ruby なら、Rake を使った、Capistrano とか、
Thor とか
Ruby なら、Rake を使った、Capistrano とか、
Thor とか
2019/10/29(火) 14:37:21.30ID:g8zM1lJr
rubyはけっこうです
2019/10/29(火) 15:00:21.96ID:2AEjd6SF
> ヒアドキュメント
> リモートホストのどこかにスクリプト
なるほど!それならわたしでも理解できます!
> Connection to xxx.xxx.xxx.xxx closed
これは、
ssh host 'ls -1t /home/app/'${var}'/*.log | tail -n +2 | xargs rm -f'
としたときに、
/dev/tty を読み込むために開けませんでした: そのようなデバイスやアドレスはありません
と言われてしまったので、sshに-tをつけてから出るようになりました。
サーバーのアプリが集めた写真をscpでダウンロード→
→ダウンロードした写真を削除→アプリのログを削除
って流れのスクリプトなのでやたらとConnection to xxx.xxx.xxx.xxx closedが出ます。
> リモートホストのどこかにスクリプト
なるほど!それならわたしでも理解できます!
> Connection to xxx.xxx.xxx.xxx closed
これは、
ssh host 'ls -1t /home/app/'${var}'/*.log | tail -n +2 | xargs rm -f'
としたときに、
/dev/tty を読み込むために開けませんでした: そのようなデバイスやアドレスはありません
と言われてしまったので、sshに-tをつけてから出るようになりました。
サーバーのアプリが集めた写真をscpでダウンロード→
→ダウンロードした写真を削除→アプリのログを削除
って流れのスクリプトなのでやたらとConnection to xxx.xxx.xxx.xxx closedが出ます。
49デフォルトの名無しさん
2019/10/29(火) 15:57:57.38ID:zCzSjgo7 sshで接続する先のサーバに予めシェルスクリプト送り込んでおいてsshで実行だけするという手もあるな。
あまりにも長くて複雑な場合はその方が楽だと思う。
ただし、送り込んでから実行するまでの間に何者かによって別のファイルに置き換えられてしまったら終わりなのでその心配のない環境でしかできない。
あまりにも長くて複雑な場合はその方が楽だと思う。
ただし、送り込んでから実行するまでの間に何者かによって別のファイルに置き換えられてしまったら終わりなのでその心配のない環境でしかできない。
50デフォルトの名無しさん
2019/10/29(火) 15:59:43.78ID:zCzSjgo7 うう。リロードし忘れて書いたら既に同じようなのが書かれている。orz
2019/10/29(火) 16:01:56.26ID:spBBwL/I
やり方は忘れたが、ローカルでgzにしたものをワンライナーで
送ってリモートに保存せずに実行っていうのをやったことがある気がする
かもしれないけど、保存していたかもしれない
送ってリモートに保存せずに実行っていうのをやったことがある気がする
かもしれないけど、保存していたかもしれない
5246
2019/10/30(水) 15:36:46.01ID:p2ffZ2o0 環境構築のChef は、サーバーに、Ruby をインストールする。
そこで、サーバーに、Ruby Script を転送して、Rubyで実行する
一方、Ansible は、サーバーに、Python をインストールしない
他にも、Capistrano, Terraform などもある
そこで、サーバーに、Ruby Script を転送して、Rubyで実行する
一方、Ansible は、サーバーに、Python をインストールしない
他にも、Capistrano, Terraform などもある
2019/10/30(水) 18:02:20.30ID:ssr4q2PY
>>52
きたーーー!!!
きたーーー!!!
2019/10/31(木) 17:56:20.75ID:pBbgzdOe
cshで書いたスクリプトの途中でキーから入力をしたいんですが
なんという命令で実現できますか?
なんという命令で実現できますか?
2019/10/31(木) 18:01:50.06ID:wR8wpXdO
set key_input = $<
2019/10/31(木) 19:36:28.51ID:pBbgzdOe
>>55
サンクス(´・ω・`)
サンクス(´・ω・`)
2019/11/06(水) 17:06:15.24ID:4kXKpMLv
aliasってxargsじゃ使えないけど使えたらまずいんだろうか
関数ならexportすればできるけどさ
関数ならexportすればできるけどさ
58デフォルトの名無しさん
2019/11/06(水) 19:12:11.78ID:wTTuQQRz >>57
まずいとかいうわけじゃなくて、xargsは外部コマンドだよ。
例えば、俺がC言語であるプログラムを作ったとする。
俺のプログラムから、親プロセス(シェル)がなにかもわからないのに、
そのシェルで定義したメモリ内部のものを呼び出せるわけがない
まずいとかいうわけじゃなくて、xargsは外部コマンドだよ。
例えば、俺がC言語であるプログラムを作ったとする。
俺のプログラムから、親プロセス(シェル)がなにかもわからないのに、
そのシェルで定義したメモリ内部のものを呼び出せるわけがない
59デフォルトの名無しさん
2019/11/06(水) 19:12:36.64ID:wTTuQQRz 関数も無理やろ?
2019/11/06(水) 19:20:58.71ID:wTTuQQRz
たたbashに関数をexportできる機能があるってのは不思議なんだよなw
まあなんか変なことしてるんだろう。で気にしてなかったけどさ、
少し試してみたら、bashからbashを起動したときには使えるが、
zshだと使えないし、bash→dash→bashの流れでも使えない。
どういう仕組なんだろう?
まあなんか変なことしてるんだろう。で気にしてなかったけどさ、
少し試してみたら、bashからbashを起動したときには使えるが、
zshだと使えないし、bash→dash→bashの流れでも使えない。
どういう仕組なんだろう?
2019/11/06(水) 19:34:34.77ID:OvjaMqE0
echo 'Hello World' | xargs -I@ bash -c $'shopt -s expand_aliases;alias p="echo";\n p @'
2019/11/07(木) 00:18:43.96ID:dfqCliYv
func(){ echo $@;}
export -f func
echo foo | xargs func
xargs: func: そのようなファイルやディレクトリはありません
echo foo | xargs -I@ bash -c 'echo @'
foo
関数ならこうだな
xargsでaliasはbashだと無理だからtcshでやれってstack overflowで見た
export -f func
echo foo | xargs func
xargs: func: そのようなファイルやディレクトリはありません
echo foo | xargs -I@ bash -c 'echo @'
foo
関数ならこうだな
xargsでaliasはbashだと無理だからtcshでやれってstack overflowで見た
2019/11/07(木) 08:59:49.28ID:C0Y8MuYI
macては動かないのでwindows使ってくださいみたいな暴論
2019/11/07(木) 11:05:05.20ID:cfhO2vSD
>>60
export -f は環境変数に
BASH_FUNC_関数名%%=関数を文字列
を設定してるだけだからじゃね。bashは起動時に環境変数にそゆのがあったら関数とし展開するから使える、その他はそんな環境変数知らんから単なる環境変数のままな感じな
dashは起動すると、その環境変数が引き継がれないからそこで断ち切られる感じかな
関数にしろaliasにしろサブプロセスに引き継ぐという考え自体がイレギュラーな感じだな
export -f は環境変数に
BASH_FUNC_関数名%%=関数を文字列
を設定してるだけだからじゃね。bashは起動時に環境変数にそゆのがあったら関数とし展開するから使える、その他はそんな環境変数知らんから単なる環境変数のままな感じな
dashは起動すると、その環境変数が引き継がれないからそこで断ち切られる感じかな
関数にしろaliasにしろサブプロセスに引き継ぐという考え自体がイレギュラーな感じだな
2019/11/07(木) 11:11:30.53ID:sEmiRyTj
>>64
やっぱり環境変数経由なのか?
でもちゃんと確認したんだけどなw
まさかbash以外の外部コマンドを実行するときに削除してるとか?
そしてbashの中からexport -pとかしたときは省いてるとか?
やっぱり環境変数経由なのか?
でもちゃんと確認したんだけどなw
まさかbash以外の外部コマンドを実行するときに削除してるとか?
そしてbashの中からexport -pとかしたときは省いてるとか?
2019/11/07(木) 11:19:16.71ID:cfhO2vSD
2019/11/07(木) 11:26:10.68ID:mwfKyddL
なんかもろにそれっぽいのがあった。dashは一般的でないような名前のは削除するらしい
https://unix.stackexchange.com/questions/498905/why-is-my-bash-func-foobar-environment-variable-unset-in-shell-subprocesses
https://unix.stackexchange.com/questions/498905/why-is-my-bash-func-foobar-environment-variable-unset-in-shell-subprocesses
2019/11/07(木) 11:52:29.35ID:sEmiRyTj
ようやく見れたw
envで見れるね。export使ってた。
envで見れるね。export使ってた。
2019/11/07(木) 11:53:35.24ID:sEmiRyTj
この変数使えば、なにか面白いことできそう。
ってか、xargsの引数にできないか?
ってか、xargsの引数にできないか?
2019/11/07(木) 11:54:11.02ID:sEmiRyTj
bashを介せば
2019/11/08(金) 00:07:00.88ID:jWGBsuvq
alias xargs='xargs '
echo *txt | xargs ll
.basurcの登録分はこれでもいける
echo *txt | xargs ll
.basurcの登録分はこれでもいける
2019/11/14(木) 12:41:11.56ID:RaS+/sOM
uucpとかって今時どういう活用法あるかな?
2019/11/14(木) 12:59:55.09ID:GaAZ8ORG
TrailBlazer でも手に入れたのか
74デフォルトの名無しさん
2019/11/27(水) 15:42:28.61ID:JZevxkSS kill とtrapでソフトタイマ作ってみた。需要あるかな
2019/11/27(水) 16:34:50.24ID:KOWJoLHR
sleepと何が違うん?
76デフォルトの名無しさん
2019/11/27(水) 18:43:12.26ID:9SXmP3sk SECONDSとの比較だからずれの蓄積がない。
平行処理が出来る。
平行処理が出来る。
2019/11/27(水) 18:48:52.87ID:KOWJoLHR
ずれの蓄積に関しては、sleepでも補正していけばなんとかなるので。
並行処理はまあそうだね。需要あるんじゃない?
コード見てなにかに使えそうなら使うかも
どこまで作り込んでるのかしらないが
並行処理はまあそうだね。需要あるんじゃない?
コード見てなにかに使えそうなら使うかも
どこまで作り込んでるのかしらないが
78デフォルトの名無しさん
2019/11/28(木) 06:15:51.80ID:f/6vs/+B シグナル発生をバックグランドで動かしシェルスクリプトのプロセスに送るのがかなめ。
2019/11/28(木) 07:03:59.17ID:uZo2jF8i
うん。それはわかるw
前に条件を満たすまで無限ループ+タイムアウト機能ってのを実装したことがあるから
結局複雑な割にタイムアウトすることはまず無いので廃止したけどさ
前に条件を満たすまで無限ループ+タイムアウト機能ってのを実装したことがあるから
結局複雑な割にタイムアウトすることはまず無いので廃止したけどさ
2019/11/28(木) 07:05:43.89ID:uZo2jF8i
もしここに書いたらレビューするかもね
内容が気に入ればだけど
内容が気に入ればだけど
81デフォルトの名無しさん
2019/11/28(木) 08:08:54.32ID:f/6vs/+B いっぺんにアップできないから小出し。
#! /bin/bash
MAX_TIMER=10;
OLD_SECONDS=$SECONDS;
while true; do
cp_SECONDS=$SECONDS;
if [ $cp_SECONDS -ne $OLD_SECONDS ]; then
kill -SIGINT $$;
OLD_SECONDS=$cp_SECONDS;
fi
sleep 0.5;
done &
#! /bin/bash
MAX_TIMER=10;
OLD_SECONDS=$SECONDS;
while true; do
cp_SECONDS=$SECONDS;
if [ $cp_SECONDS -ne $OLD_SECONDS ]; then
kill -SIGINT $$;
OLD_SECONDS=$cp_SECONDS;
fi
sleep 0.5;
done &
82デフォルトの名無しさん
2019/11/28(木) 08:09:31.03ID:f/6vs/+B for ((aa = 0; aa < MAX_TIMER; aa++)); do
tim_flg[$aa]=0;
tim[$aa]=0;
#echo ${tim_flg[*]}
done;
tim_flg[$aa]=0;
tim[$aa]=0;
#echo ${tim_flg[*]}
done;
83デフォルトの名無しさん
2019/11/28(木) 08:09:55.57ID:f/6vs/+B trap '
for ((aa = 0; aa < MAX_TIMER; aa++)); do
if [ ${tim_flg[$aa]} -eq 1 ]; then
if [ ${tim[$aa]} -gt 0 ]; then
tim[$aa]=$((tim[$aa] - 1));
fi
fi
done
printf "%3d" ${tim[*]};
echo ":" $(date -R);
' SIGINT
for ((aa = 0; aa < MAX_TIMER; aa++)); do
if [ ${tim_flg[$aa]} -eq 1 ]; then
if [ ${tim[$aa]} -gt 0 ]; then
tim[$aa]=$((tim[$aa] - 1));
fi
fi
done
printf "%3d" ${tim[*]};
echo ":" $(date -R);
' SIGINT
84デフォルトの名無しさん
2019/11/28(木) 08:11:04.34ID:f/6vs/+B for((nn=0; nn < 10; nn++)); do
tim_flg[$nn]=1;
done
while true; do
for((nn=0; nn < 10; nn++)); do
if [ ${tim[$nn]} -eq 0 ]; then tim[$nn]=$((nn + 2)); fi
done
sleep 0.6
done;
終わり
tim_flg[$nn]=1;
done
while true; do
for((nn=0; nn < 10; nn++)); do
if [ ${tim[$nn]} -eq 0 ]; then tim[$nn]=$((nn + 2)); fi
done
sleep 0.6
done;
終わり
2019/11/28(木) 08:24:45.92ID:uZo2jF8i
なんか動いてるけど、何やってるのかわからんなw
とりあえずCTRL+Cで停止しなかった。
とりあえずCTRL+Cで停止しなかった。
86デフォルトの名無しさん
2019/11/28(木) 08:29:37.54ID:f/6vs/+B 動作を確認するためタイマーのカウントとセットを繰り返しています。
終了するためにはSIGKILLを与えてください。
終了するためにはSIGKILLを与えてください。
2019/11/28(木) 08:30:36.19ID:uZo2jF8i
しばし読んでみたけど、やっぱりわからんw
これ指定したn秒ごとにシグナル送るんじゃないのか?
tim配列とかtim_flgの意味がさっぱりだ
これ指定したn秒ごとにシグナル送るんじゃないのか?
tim配列とかtim_flgの意味がさっぱりだ
2019/11/28(木) 08:41:39.82ID:uZo2jF8i
簡単な所から。まずシグナルはSIGはいらんぞ。
bash限定ならそれでもいいがPOSIX的には無いほうが正しい。
INTはCTRL-Cなので、USR1またはUSR2、もしくはSIGHUPとかの方が良い。
セミコロンはC言語じゃないんだから行を継続しないときにはつけないのが一般的
bash限定ならそれでもいいがPOSIX的には無いほうが正しい。
INTはCTRL-Cなので、USR1またはUSR2、もしくはSIGHUPとかの方が良い。
セミコロンはC言語じゃないんだから行を継続しないときにはつけないのが一般的
89デフォルトの名無しさん
2019/11/28(木) 08:42:09.42ID:f/6vs/+B 各タイマが0になったらなんかをちょっとやり、またタイマをセットするというプログラムです
tim配列はタイマ本体です。tim_flg配列はタイマ使用/不使用のフラグです。
tim配列はタイマ本体です。tim_flg配列はタイマ使用/不使用のフラグです。
2019/11/28(木) 08:49:25.10ID:uZo2jF8i
やっと理解したが、これ説明なしに理解するの大変だぞw
本質的じゃないコードが複雑でそっちのほうが多すぎる。
本質的じゃないコードが複雑でそっちのほうが多すぎる。
2019/11/28(木) 08:51:32.36ID:uZo2jF8i
tim_flgの意味がないな。いや意図は想像できる。(というか>>89に書いてあるか)
サンプルとしてはノイズにしかなってないので理解ができない。
サンプルとしてはノイズにしかなってないので理解ができない。
2019/11/28(木) 21:14:01.96ID:uBUVzLWV
宿題の添削をしてやるとか親切たなw
2019/11/28(木) 21:36:47.47ID:asJppHFe
目的は、bash依存すんな。って言うことだったんだがなw
流石にbash依存してる部分が、本質的じゃない所ばかりだとやる気が。
バッサリ削ったら簡単に、bash依存なくせるんでどうしようかなと思いながらレス待ちw
流石にbash依存してる部分が、本質的じゃない所ばかりだとやる気が。
バッサリ削ったら簡単に、bash依存なくせるんでどうしようかなと思いながらレス待ちw
2019/11/28(木) 23:49:59.71ID:RaRUIeaw
bash依存しまくりで
https://wandbox.org/permlink/EHSiHk726Bn4qvVO
https://wandbox.org/permlink/EHSiHk726Bn4qvVO
95デフォルトの名無しさん
2019/11/29(金) 00:53:33.34ID:Fh79+8D6 あんまりソフトタイマに有用性を感じてもらえないようで残念でした。
2019/11/29(金) 01:09:45.97ID:IIqk2+5U
timeoutでやっつけ
2019/11/29(金) 02:19:44.34ID:XcyRQJ1W
2019/11/29(金) 04:30:20.91ID:9RHOSbKH
2019/11/29(金) 05:10:07.47ID:hA38q2SN
おれおれかよ
100デフォルトの名無しさん
2019/11/30(土) 00:04:41.28ID:FMRNVBPU Wgetであるサイトの特定のディレクトリ配下の特定のファイルを
ダウンロードしたくて下記のコマンドを書いてもルートのindex.html
しかダウンロードしてくれません。
これは何がまずいのでしょうか?
wget -r -A Download拡張子 -I /Downloadディレクトリ URL
ダウンロードしたくて下記のコマンドを書いてもルートのindex.html
しかダウンロードしてくれません。
これは何がまずいのでしょうか?
wget -r -A Download拡張子 -I /Downloadディレクトリ URL
101デフォルトの名無しさん
2019/11/30(土) 00:53:41.92ID:KUL76oc2 オプションに -e robots=off -U mozilla でも付けてみたら上手く行くかも
102デフォルトの名無しさん
2019/11/30(土) 00:54:25.61ID:czFcPKLy 碌に調べずの返答でアレなんだが多分訪問先のサイトがファイル一覧
を返すのを禁止してる(apache httpd だと Indexes オプションが有効
になってない)からだと思う
を返すのを禁止してる(apache httpd だと Indexes オプションが有効
になってない)からだと思う
103デフォルトの名無しさん
2019/11/30(土) 13:20:31.41ID:f33nsdyy リファラの偽装が必要かも。知らんけど
104デフォルトの名無しさん
2019/11/30(土) 16:49:40.30ID:mvBIEviw googleはbashがデフォルト
105デフォルトの名無しさん
2019/12/01(日) 11:47:31.42ID:0pH8jk7+ bash/zsh依存しまくりで
https://wandbox.org/permlink/moif346imXqiuDxD
そんなのが仮に必要でも
trap 'date -R' USR1
for (( i=1 ; i <= 10 ; i++ )); do
( sleep $i; kill -USR1 $$ ) &
done
wait
でいいだろとしか思わんけどw
https://wandbox.org/permlink/moif346imXqiuDxD
そんなのが仮に必要でも
trap 'date -R' USR1
for (( i=1 ; i <= 10 ; i++ )); do
( sleep $i; kill -USR1 $$ ) &
done
wait
でいいだろとしか思わんけどw
106デフォルトの名無しさん
2019/12/01(日) 19:22:22.28ID:IoGKXgrY >>91
tim_flgをゴミ扱いしたこいつがソフトタイマを理解していない。
tim_flgをゴミ扱いしたこいつがソフトタイマを理解していない。
107デフォルトの名無しさん
2019/12/01(日) 19:49:41.33ID:YWi4MX0G このサンプルでは1固定なんだからゴミやろ
108デフォルトの名無しさん
2019/12/02(月) 22:02:29.21ID:9nn8K+iP 親ディレクトリ
-子ディレ クトリ(1)
file(1).txt
file ().txt
-子デ ィレクトリ(2)
file(2) .txt
-子ディレクトリ(3)
fil e(3).txt
ディレクトリとファイル名の半角スペースと半角の()を_で置換したいのですが
どうやればいいのでしょうか
for dir in $(ls -d */); do
for f in ${dir}*; do
mv "$f" `echo $f|sed -e 's/[ ()]/_/g'`
done
done
これでディレクトリ名とファイル名はどうにかなったのですが、、
一回目ではディレクトリ名が変換されてしまうのでファイル名が変換されず
対応策として同じコードを2回実行してファイル名も変換しています
まず一回目にディレクトリ名を変換するために
for dir in $(ls -d */); do
mv "$dir" `echo $dir|sed -e 's/[ ()]/_/g'`
done
をやってみたのですが、statがなんやらと警告が出てきます
-子ディレ クトリ(1)
file(1).txt
file ().txt
-子デ ィレクトリ(2)
file(2) .txt
-子ディレクトリ(3)
fil e(3).txt
ディレクトリとファイル名の半角スペースと半角の()を_で置換したいのですが
どうやればいいのでしょうか
for dir in $(ls -d */); do
for f in ${dir}*; do
mv "$f" `echo $f|sed -e 's/[ ()]/_/g'`
done
done
これでディレクトリ名とファイル名はどうにかなったのですが、、
一回目ではディレクトリ名が変換されてしまうのでファイル名が変換されず
対応策として同じコードを2回実行してファイル名も変換しています
まず一回目にディレクトリ名を変換するために
for dir in $(ls -d */); do
mv "$dir" `echo $dir|sed -e 's/[ ()]/_/g'`
done
をやってみたのですが、statがなんやらと警告が出てきます
109デフォルトの名無しさん
2019/12/02(月) 22:13:56.47ID:cDa5fVnx そういう用途なら、forとかlsとか使わないでfind使え
110デフォルトの名無しさん
2019/12/02(月) 22:15:41.19ID:cDa5fVnx いきなりstatがでるような事はやめて、
echo mv なんとか かんとか で実行命令を表示するようにしろ
怖すぎるわ。それやればなんとかなるだろ
echo mv なんとか かんとか で実行命令を表示するようにしろ
怖すぎるわ。それやればなんとかなるだろ
111デフォルトの名無しさん
2019/12/02(月) 22:19:56.11ID:agtAae1a rename 関係はperlで試せる dry run 作ってる
https://pastebin.com/0uJ462jq
touch "file(1).txt"; ~/bin/rename.pl dry 'tr/[()]/_/' *txt
file(1).txt => file_1_.txt
~/bin/rename.pl run 'tr/[()]/_/' *txt; ls
file_1_.txt
https://pastebin.com/0uJ462jq
touch "file(1).txt"; ~/bin/rename.pl dry 'tr/[()]/_/' *txt
file(1).txt => file_1_.txt
~/bin/rename.pl run 'tr/[()]/_/' *txt; ls
file_1_.txt
112デフォルトの名無しさん
2019/12/02(月) 22:46:09.47ID:RT0MauQR find . -name '*[ ()]*' -print | sort -r | while read item; do
mv "$item" "${item%/*}/$(echo "${item##*/}" | tr ' ()' '_')"
done
mv "$item" "${item%/*}/$(echo "${item##*/}" | tr ' ()' '_')"
done
113デフォルトの名無しさん
2019/12/03(火) 07:24:55.79ID:v9g/lO5M Ruby で作った。
コードは次のレスに書く
DryRun を使ったので実際には、変更されない
ファイル/ディレクトリは、同時に変更すると、バグるかも知れないので、別々に変更する。
また「子ディレクトリ(1)/孫ディレクトリ(1)」のように、2か所以上同時に変更すると、バグるかも知れない
こんな複雑なものを、シェルスクリプトで書くのは超危険!
特に移動は、dest が存在するときは移動になり、
存在しないときは変更になるという、極めて難しい場合分けが必要で、
処理の途中でエラーになると、エラーまでの処理が確定してしまうから、中途半端で巻き戻せないから、
必ず、親ディレクトリ以下のバックアップを取っておく!
コードは次のレスに書く
DryRun を使ったので実際には、変更されない
ファイル/ディレクトリは、同時に変更すると、バグるかも知れないので、別々に変更する。
また「子ディレクトリ(1)/孫ディレクトリ(1)」のように、2か所以上同時に変更すると、バグるかも知れない
こんな複雑なものを、シェルスクリプトで書くのは超危険!
特に移動は、dest が存在するときは移動になり、
存在しないときは変更になるという、極めて難しい場合分けが必要で、
処理の途中でエラーになると、エラーまでの処理が確定してしまうから、中途半端で巻き戻せないから、
必ず、親ディレクトリ以下のバックアップを取っておく!
114113
2019/12/03(火) 07:25:55.85ID:v9g/lO5M require 'fileutils'
root_dir = "C:/Users/Owner/Documents/Ruby/test/**/*" # 基準ディレクトリ
# 変更前のファイル/ディレクトリを入れる配列
src_files = [ ]; src_dirs = [ ]
# 基準ディレクトリ以下のファイル/ディレクトリを取り出して、配列に入れる
Dir.glob( root_dir ) do |path|
case
when File.file?( path ) then src_files.push ( path )
when File.directory?( path ) then src_dirs.push ( path )
else # 処理しない
end
end
def change_paths( src_ary ) # ファイル/ディレクトリ名を変更する
src_ary.each do |src_path|
dest_path = src_path.tr( " ()", "_" ) # 変換
next if src_path == dest_path # 変換されなかった場合は、処理しない
# 変更後の名前のファイル/ディレクトリが、既に存在すれば、エラー
msg = "変更後の名前のファイル/ディレクトリが、既に存在します!\n#{ dest_path }"
raise msg if File.exist? ( dest_path )
FileUtils::DryRun.move( src_path, dest_path )
end
end
change_paths( src_dirs )
change_paths( src_files )
root_dir = "C:/Users/Owner/Documents/Ruby/test/**/*" # 基準ディレクトリ
# 変更前のファイル/ディレクトリを入れる配列
src_files = [ ]; src_dirs = [ ]
# 基準ディレクトリ以下のファイル/ディレクトリを取り出して、配列に入れる
Dir.glob( root_dir ) do |path|
case
when File.file?( path ) then src_files.push ( path )
when File.directory?( path ) then src_dirs.push ( path )
else # 処理しない
end
end
def change_paths( src_ary ) # ファイル/ディレクトリ名を変更する
src_ary.each do |src_path|
dest_path = src_path.tr( " ()", "_" ) # 変換
next if src_path == dest_path # 変換されなかった場合は、処理しない
# 変更後の名前のファイル/ディレクトリが、既に存在すれば、エラー
msg = "変更後の名前のファイル/ディレクトリが、既に存在します!\n#{ dest_path }"
raise msg if File.exist? ( dest_path )
FileUtils::DryRun.move( src_path, dest_path )
end
end
change_paths( src_dirs )
change_paths( src_files )
115デフォルトの名無しさん
2019/12/03(火) 08:29:02.93ID:ujGDA/f+ なんかかえってめんどくさいことしてんな。perlでめんどくさく書きたいだけ?
116デフォルトの名無しさん
2019/12/03(火) 08:29:47.31ID:ujGDA/f+ perlではなくrubyか。しつれい
117113
2019/12/03(火) 09:46:02.07ID:v9g/lO5M mv を作った奴は、頭おかしいw
dest が存在するときは移動になり、
存在しないときは名前の変更になるという、極めて難しい場合分けが必要だから
漏れらが欲しいのは、
rename だけする関数と、移動するだけの関数の、2つに分かれている関数
それが分かれていないから、自分で処理を分けて、
かなりチェックしないと、バグってしまう
dest が存在するときは移動になり、
存在しないときは名前の変更になるという、極めて難しい場合分けが必要だから
漏れらが欲しいのは、
rename だけする関数と、移動するだけの関数の、2つに分かれている関数
それが分かれていないから、自分で処理を分けて、
かなりチェックしないと、バグってしまう
118デフォルトの名無しさん
2019/12/03(火) 12:17:58.24ID:5ZiHQIvd つまり自分に都合が悪い仕様=バグ
119デフォルトの名無しさん
2019/12/03(火) 12:28:33.61ID:Uh1tIUQA 一括リネームってたいてい複雑になるから
GUIツールを使ったほうが良いと思うんだよね
Windows 10版のPowerToysにリネーム機能が追加
https://pc.watch.impress.co.jp/docs/news/1215602.html
GUIツールを使ったほうが良いと思うんだよね
Windows 10版のPowerToysにリネーム機能が追加
https://pc.watch.impress.co.jp/docs/news/1215602.html
120デフォルトの名無しさん
2019/12/03(火) 18:09:42.76ID:+zVWCKlo >>112
Fix(IFS文字が頭と末尾にある場合。dirname,basenameにしたのは気分)&Variation
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
mv "$item" "$(dirname "$item")/$(basename "$item" | tr ' ()' '_')"
done)
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
dir="$(dirname "$item")"; newname="$(basename "$item" | tr ' ()' '_')"; newpath="$dir/$newname"
[ ! -e "$newpath" ] && mv "$item" "$newpath" || echo "can't rename $item, exists $newname" >&2
done
# can't rename $item 〜 メッセージは単なる目安
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
dir="${item%/*}"; newname="$(tr ' ()' '_' <<< ${item##*/})"
[ -e "$dir/$newname" ] && {
name="${newname%.*}_"
ext="${newname#*.}"; [ "$ext" = "$newname" ] && ext='' || ext=".$ext"
while [ -e "$dir/$name$ext" ]; do
name+='_'
done
newname="$name$ext"
}
mv "$item" "$dir/$newname"
done)
Fix(IFS文字が頭と末尾にある場合。dirname,basenameにしたのは気分)&Variation
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
mv "$item" "$(dirname "$item")/$(basename "$item" | tr ' ()' '_')"
done)
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
dir="$(dirname "$item")"; newname="$(basename "$item" | tr ' ()' '_')"; newpath="$dir/$newname"
[ ! -e "$newpath" ] && mv "$item" "$newpath" || echo "can't rename $item, exists $newname" >&2
done
# can't rename $item 〜 メッセージは単なる目安
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
dir="${item%/*}"; newname="$(tr ' ()' '_' <<< ${item##*/})"
[ -e "$dir/$newname" ] && {
name="${newname%.*}_"
ext="${newname#*.}"; [ "$ext" = "$newname" ] && ext='' || ext=".$ext"
while [ -e "$dir/$name$ext" ]; do
name+='_'
done
newname="$name$ext"
}
mv "$item" "$dir/$newname"
done)
121デフォルトの名無しさん
2019/12/03(火) 18:14:03.14ID:+zVWCKlo122デフォルトの名無しさん
2019/12/03(火) 18:30:56.19ID:HnkJN8FN >>111
rename自体がperlだしちゃんと試行もあるけど
rename自体がperlだしちゃんと試行もあるけど
123デフォルトの名無しさん
2019/12/03(火) 19:27:45.48ID:mUaHu9IR124デフォルトの名無しさん
2019/12/03(火) 19:44:49.63ID:R2wB6lmg Linuxディストリによっては標準で入っている、perlスクリプトで作られたrenameコマンドのことだろ
125デフォルトの名無しさん
2019/12/03(火) 20:48:36.39ID:jDo5c24e renameは標準で入ってないとはいえ
テスト無しの自作コードでやるような処理じゃないやろ
find -depth -exec rename -nでdry-runしてから-n消せばいい
テスト無しの自作コードでやるような処理じゃないやろ
find -depth -exec rename -nでdry-runしてから-n消せばいい
126デフォルトの名無しさん
2019/12/03(火) 21:32:10.96ID:yTVXI633 話のネタから外れて何を主張したいのだか
127デフォルトの名無しさん
2019/12/03(火) 22:25:15.93ID:yTVXI633 dry-runって言っても結局ひとつをrename/mvするその時点での状態でしか判断してないし、mvコマンドの前にecho付けるのと何が違うのだか
[ "$1" = "-n" ] && nac=echo || nac=''
$nac mv ...
でスイッチにしたけりゃ同じようにできるだろし
極めて難しいらしいことも結局時点での存在チェックしてるだけで、シェルスクリプトでtestを使うのと何がそうも極めて難しいほど違うのか
>>122
既に存在してたらエラー(オプションによって強行もできる)でもあるよね
The original C<rename> did not check for the existence of target filenames,
so had to be used with care. I hope I've fixed that (Robin Barker).
って、わざわざコメント書くようにな目玉なw
どのバージョンを使ってるのかわからんけど、パッケージによってはものすごいオプション拡張されたのが使われてるねえ
[ "$1" = "-n" ] && nac=echo || nac=''
$nac mv ...
でスイッチにしたけりゃ同じようにできるだろし
極めて難しいらしいことも結局時点での存在チェックしてるだけで、シェルスクリプトでtestを使うのと何がそうも極めて難しいほど違うのか
>>122
既に存在してたらエラー(オプションによって強行もできる)でもあるよね
The original C<rename> did not check for the existence of target filenames,
so had to be used with care. I hope I've fixed that (Robin Barker).
って、わざわざコメント書くようにな目玉なw
どのバージョンを使ってるのかわからんけど、パッケージによってはものすごいオプション拡張されたのが使われてるねえ
128113
2019/12/03(火) 23:09:51.48ID:v9g/lO5M Windows10, WSL, Ubuntu 16.04 にも、/usr/bin/rename がある
この手の処理の何がヤバイかと言うと、
例えば、3つ目の処理で、エラーが出ると、
2つ目までは、変更されてしまっているから、
そこから再実行すると、最初から実行していた時と、初期条件が変わっている
データベースと同じで、一部分だけ更新されたような、中途半端な状態になってはいけない(一貫性)。
エラー時には、すべてをロールバックするべき。
または、全体のバックアップを取っておく
すべてを更新するか、すべてをロールバックするのどちらかの状態だけにする
この手の処理の何がヤバイかと言うと、
例えば、3つ目の処理で、エラーが出ると、
2つ目までは、変更されてしまっているから、
そこから再実行すると、最初から実行していた時と、初期条件が変わっている
データベースと同じで、一部分だけ更新されたような、中途半端な状態になってはいけない(一貫性)。
エラー時には、すべてをロールバックするべき。
または、全体のバックアップを取っておく
すべてを更新するか、すべてをロールバックするのどちらかの状態だけにする
129デフォルトの名無しさん
2019/12/03(火) 23:14:22.94ID:50yNXJCt 自作コードがそれ以下なのになにを言っているのだか
130デフォルトの名無しさん
2019/12/04(水) 00:03:09.04ID:LOcDYH/A >>108
まだ見てくれてる? 変更するんじゃなくて新たに作るほうが無難だと思うよ。
新たに作るといっても通常ファイルはハードリンクできるからね。
実際にやってみたよ。
$ find a
a
a/a (0)
a/a (0)/a (00)
a/a (0)/a (01)
a/a (1)
a/a (1)/a (11)
a/a (1)/a (10)
$ find b
b
$ cd a
$ find * -type d | perl -ne 'chop; s/[ ()]/_/g ; mkdir("../b/$_") || die("$!:$_");'
$ find * -type f | perl -ne 'chop; $old = $_; s/[ ()]/_/g ; link( $old,"../b/$_") || die("$!:$_");'
$ cd ..
$ find b
b
b/a__1_
b/a__1_/a__10_
b/a__1_/a__11_
b/a__0_
b/a__0_/a__00_
b/a__0_/a__01_
$
途中で何か起こっても起こらなくても a の方は無傷だからね。好きなだけやり直せるよ。
まだ見てくれてる? 変更するんじゃなくて新たに作るほうが無難だと思うよ。
新たに作るといっても通常ファイルはハードリンクできるからね。
実際にやってみたよ。
$ find a
a
a/a (0)
a/a (0)/a (00)
a/a (0)/a (01)
a/a (1)
a/a (1)/a (11)
a/a (1)/a (10)
$ find b
b
$ cd a
$ find * -type d | perl -ne 'chop; s/[ ()]/_/g ; mkdir("../b/$_") || die("$!:$_");'
$ find * -type f | perl -ne 'chop; $old = $_; s/[ ()]/_/g ; link( $old,"../b/$_") || die("$!:$_");'
$ cd ..
$ find b
b
b/a__1_
b/a__1_/a__10_
b/a__1_/a__11_
b/a__0_
b/a__0_/a__00_
b/a__0_/a__01_
$
途中で何か起こっても起こらなくても a の方は無傷だからね。好きなだけやり直せるよ。
131デフォルトの名無しさん
2019/12/04(水) 02:51:13.25ID:hySlbdZs pax -rwlpe src dst
132デフォルトの名無しさん
2019/12/04(水) 23:27:09.69ID:xn8KyTI4 renameコマンドって複数ないか?
's/パターン/置換文字/' FILEとパターン 置換文字 FILEとサイトによって説明違うんだよな
俺が散らばったファイルをリネームする時はmoreutilsのvidir使ってるけど
テキストエディタで修正する奴な
's/パターン/置換文字/' FILEとパターン 置換文字 FILEとサイトによって説明違うんだよな
俺が散らばったファイルをリネームする時はmoreutilsのvidir使ってるけど
テキストエディタで修正する奴な
133デフォルトの名無しさん
2019/12/05(木) 00:34:07.65ID:0uggokQM Larry Wall and Robin Barker版とそれの機能拡張版のAristotle Pagaltzis版じゃね
Aristotle Pagaltzisで増えた -s パターン 置換文字 FILE 使ってじゃないの
Aristotle Pagaltzisで増えた -s パターン 置換文字 FILE 使ってじゃないの
134デフォルトの名無しさん
2019/12/05(木) 11:01:01.81ID:3XJjcX6a >>132
util-linux版とperl同梱版(これはさらにいくつかに分かれる)の違い
debian/ubuntu なら前者rename.ul後者rename(Larry Wall版)
centos なら前者rename後者prename(Peder Stray版)
util-linux版とperl同梱版(これはさらにいくつかに分かれる)の違い
debian/ubuntu なら前者rename.ul後者rename(Larry Wall版)
centos なら前者rename後者prename(Peder Stray版)
135デフォルトの名無しさん
2019/12/05(木) 11:02:39.94ID:6ZFP3Xq2136デフォルトの名無しさん
2019/12/05(木) 15:05:31.16ID:0uggokQM Larry Wall
- Robin Barker, 重複時実行しない、 重複時実行強制実行オプション
-- Aristotle Pagaltzis, 機能いろいろ (>>132 のはそのうちの -s/--subst from to じゃないの)
- Peder Stray, 重複時バックアップオプション
Aristotle Pagaltzis意外はそんなに変わらんかな。Aristotle Pagaltzisで追加した機能を使わなければAristotle Pagaltzisも
https://github.com/tldr-pages/tldr/issues/3125
Debian prename from pkg perl: Robin Barker & Larry Wall.
Debian/Ubuntu file-rename from pkg file-rename: Larry Wall.
Arch perl-rename from pkg perl-rename: Peder Stray (same as Fedora).
Fedora prename from pkg prename: Peder Stray (same as Arch).
macOS rename from pkg rename: Aristotle Pagaltzis.
らしいけど、Larry Wall版ってあるのか?Ubuntu は Larry Wall and Robin Barker だな
- Robin Barker, 重複時実行しない、 重複時実行強制実行オプション
-- Aristotle Pagaltzis, 機能いろいろ (>>132 のはそのうちの -s/--subst from to じゃないの)
- Peder Stray, 重複時バックアップオプション
Aristotle Pagaltzis意外はそんなに変わらんかな。Aristotle Pagaltzisで追加した機能を使わなければAristotle Pagaltzisも
https://github.com/tldr-pages/tldr/issues/3125
Debian prename from pkg perl: Robin Barker & Larry Wall.
Debian/Ubuntu file-rename from pkg file-rename: Larry Wall.
Arch perl-rename from pkg perl-rename: Peder Stray (same as Fedora).
Fedora prename from pkg prename: Peder Stray (same as Arch).
macOS rename from pkg rename: Aristotle Pagaltzis.
らしいけど、Larry Wall版ってあるのか?Ubuntu は Larry Wall and Robin Barker だな
137デフォルトの名無しさん
2019/12/05(木) 15:14:33.96ID:TzSLtKO4 たぶん基本的なことだと思うんですが、教えてください。
#!/bin/bash
echo -e \
'Hostname\tIP\tInterface\tVlan\tMode\tPort-Channel\tAllowed\sVlan\tDescription'\
> cp.tsv
このスクリプトを実行すると…
$cat cp.tsv
-e Hostname IP Interface Vlan Mode Port-Channel Allowed Vlan Description
このように、先頭に-eが入ってしまいます。なぜでしょう…?
#!/bin/bash
echo -e \
'Hostname\tIP\tInterface\tVlan\tMode\tPort-Channel\tAllowed\sVlan\tDescription'\
> cp.tsv
このスクリプトを実行すると…
$cat cp.tsv
-e Hostname IP Interface Vlan Mode Port-Channel Allowed Vlan Description
このように、先頭に-eが入ってしまいます。なぜでしょう…?
138デフォルトの名無しさん
2019/12/05(木) 15:19:51.21ID:0uggokQM Perl同梱(?)のprename/file-renameがLarry Wall版か
Ubuntuで pkg rename (pkg file-rename??)を入れるとprename/file-renameもLarry Wall and Robin Barker版に上書きされる感じかな??
Ubuntuで pkg rename (pkg file-rename??)を入れるとprename/file-renameもLarry Wall and Robin Barker版に上書きされる感じかな??
139デフォルトの名無しさん
2019/12/05(木) 15:21:52.11ID:0uggokQM140デフォルトの名無しさん
2019/12/05(木) 15:22:44.42ID:WdOnkWYr141デフォルトの名無しさん
2019/12/05(木) 15:55:06.05ID:Gb1I+/8K142デフォルトの名無しさん
2019/12/05(木) 15:58:33.95ID:TzSLtKO4 >>140-141
あ、ほんとだ。
sh -xで実行してました。
bash -xだと大丈夫でした。
シェバン付けてるから大丈夫だと思い込んでました。ダメなんですね。
横着せずにきちんと打つようにします。
ありがとうございました!
あ、ほんとだ。
sh -xで実行してました。
bash -xだと大丈夫でした。
シェバン付けてるから大丈夫だと思い込んでました。ダメなんですね。
横着せずにきちんと打つようにします。
ありがとうございました!
143デフォルトの名無しさん
2019/12/06(金) 20:34:56.63ID:08yg4gJX 宇宙刑事シェバン
144デフォルトの名無しさん
2019/12/10(火) 22:30:09.16ID:zD6aLrgM x-y
↑こういう形式の,ハイフンで結ばれた二つの数字の計算結果の正負だけを知りたいのですが,
なるべく処理が早い方法ないですか。
対象の文字列は標準出力ではなくて変数に格納されています。
思い付いたのは
[ ${var%-*} -lt ${var#*-} ]
か
$((var < 0))
です。
どっちもPOSIXには準拠している筈ですが,同じような処理を大量に繰り返すとどうしても遅くなります。
これがシェルスクリプトの限界なら,仕方ないのですが,もう少し最適化できそうな気もします。
どうかお知恵とお力を貸してください。
↑こういう形式の,ハイフンで結ばれた二つの数字の計算結果の正負だけを知りたいのですが,
なるべく処理が早い方法ないですか。
対象の文字列は標準出力ではなくて変数に格納されています。
思い付いたのは
[ ${var%-*} -lt ${var#*-} ]
か
$((var < 0))
です。
どっちもPOSIXには準拠している筈ですが,同じような処理を大量に繰り返すとどうしても遅くなります。
これがシェルスクリプトの限界なら,仕方ないのですが,もう少し最適化できそうな気もします。
どうかお知恵とお力を貸してください。
145デフォルトの名無しさん
2019/12/10(火) 23:18:51.56ID:kdXCWOtW $((var < 0))はPOSIX準拠じゃなくね?
やるなら [ $(($var)) -lt 0 ] こうだろうけど
それでも遅いって言うならどうしようもないと思うが、
気になるほど遅いなら別のところに問題があるんじゃね?
やるなら [ $(($var)) -lt 0 ] こうだろうけど
それでも遅いって言うならどうしようもないと思うが、
気になるほど遅いなら別のところに問題があるんじゃね?
146デフォルトの名無しさん
2019/12/10(火) 23:24:09.60ID:kdXCWOtW ちなみにうちのマシンだとこんな感じ
$ time sh -c 'var=1-2; i=0; while [ $i -lt 1000000 ]; do [ $(($var)) -lt 0 ]; i=$((i+1)); done'
real 0m2.722s
user 0m2.718s
sys 0m0.004s
100万やって3秒、1万回だと0.03秒。これが気になるとしたら
相当多くの数の計算をしてることになるはずなんだが本当に?
$ time sh -c 'var=1-2; i=0; while [ $i -lt 1000000 ]; do [ $(($var)) -lt 0 ]; i=$((i+1)); done'
real 0m2.722s
user 0m2.718s
sys 0m0.004s
100万やって3秒、1万回だと0.03秒。これが気になるとしたら
相当多くの数の計算をしてることになるはずなんだが本当に?
147デフォルトの名無しさん
2019/12/10(火) 23:25:16.53ID:SL+fGedD echo "$var<0"|bc
148デフォルトの名無しさん
2019/12/10(火) 23:28:35.11ID:kdXCWOtW bcプロセス起動してるから遅い
それは実行しなくてもわかる
それは実行しなくてもわかる
149デフォルトの名無しさん
2019/12/10(火) 23:50:31.02ID:kdXCWOtW あとオマケ、速いとは思えないけど
IFS=-
var=1-2
set -- $var
echo $1 # 1
echo $2 # 2
これを使ってもできる。
速さは [ ${var%-*} -lt ${var#*-} ] とどっこいどっこいだろうな
もしかしたらset使ったほうが速いかもしれない程度
IFS=-
var=1-2
set -- $var
echo $1 # 1
echo $2 # 2
これを使ってもできる。
速さは [ ${var%-*} -lt ${var#*-} ] とどっこいどっこいだろうな
もしかしたらset使ったほうが速いかもしれない程度
150デフォルトの名無しさん
2019/12/10(火) 23:51:59.49ID:LOypIkS3151デフォルトの名無しさん
2019/12/10(火) 23:59:28.15ID:kdXCWOtW152デフォルトの名無しさん
2019/12/11(水) 00:00:32.26ID:ivhCTlPt i7 3.4Ghzって今どき低スペックなのか?
ハイスペックかと思ってた
ハイスペックかと思ってた
153デフォルトの名無しさん
2019/12/11(水) 00:00:55.23ID:5YQOA1oq154デフォルトの名無しさん
2019/12/11(水) 00:03:27.10ID:5YQOA1oq >>152
スペックは低くはないと思うけどさ、もう古いし
中古だと2〜3万円台で搭載パソコンを買えちゃうよ
https://used.dospara.co.jp/sale/search.php?view=1&kw=Core%20i7%203770&page=1
スペックは低くはないと思うけどさ、もう古いし
中古だと2〜3万円台で搭載パソコンを買えちゃうよ
https://used.dospara.co.jp/sale/search.php?view=1&kw=Core%20i7%203770&page=1
155デフォルトの名無しさん
2019/12/11(水) 00:11:26.60ID:ivhCTlPt156デフォルトの名無しさん
2019/12/11(水) 00:15:38.57ID:rj8eSq0k バックグラウンドで色々動きっぱなし(usage 60%ぐらい)のWindows PC(Ryzen 5 2600, 3.66GHz)で
Cygwin
real 0m23.706s
user 0m23.375s
sys 0m0.093s
WSL
real 0m3.987s
user 0m3.891s
sys 0m0.016s
だった。えっ、私のCygwin遅すぎ・・・
Cygwin
real 0m23.706s
user 0m23.375s
sys 0m0.093s
WSL
real 0m3.987s
user 0m3.891s
sys 0m0.016s
だった。えっ、私のCygwin遅すぎ・・・
157デフォルトの名無しさん
2019/12/11(水) 00:21:29.42ID:5YQOA1oq158デフォルトの名無しさん
2019/12/11(水) 00:26:41.57ID:H3x5MOt+ >>153
$ printf "%d-%d¥n" $(shuf -r -i 0-999 -n 1000000) $(shuf -r -i 0-999 -n 1000000) > input.txt
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
1行目は0-999でランダムな引き算を100万件生成してファイル出力
2行目の処理は50秒かかったのと同じマシンで1.7~1.8秒で終わる
計算結果をキャッシュするからか10種類くらいの引き算の使い回しだと
100万件でも0.17秒くらいになる
$ printf "%d-%d¥n" $(shuf -r -i 0-999 -n 1000000) $(shuf -r -i 0-999 -n 1000000) > input.txt
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
1行目は0-999でランダムな引き算を100万件生成してファイル出力
2行目の処理は50秒かかったのと同じマシンで1.7~1.8秒で終わる
計算結果をキャッシュするからか10種類くらいの引き算の使い回しだと
100万件でも0.17秒くらいになる
159デフォルトの名無しさん
2019/12/11(水) 00:40:07.88ID:5YQOA1oq >>158
円文字化けしてんぞ
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
real 0m0.373s
user 0m0.300s
sys 0m0.005s
$ time sh -c 'while read var; do [ $(($var)) -gt 0 ] && echo "+$var" || echo " $var"; done' < input.txt > output2.txt
real 0m8.247s
user 0m4.337s
sys 0m3.904s
まあ速いんだろうけどさ。想定の範囲内かな。
円文字化けしてんぞ
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
real 0m0.373s
user 0m0.300s
sys 0m0.005s
$ time sh -c 'while read var; do [ $(($var)) -gt 0 ] && echo "+$var" || echo " $var"; done' < input.txt > output2.txt
real 0m8.247s
user 0m4.337s
sys 0m3.904s
まあ速いんだろうけどさ。想定の範囲内かな。
160デフォルトの名無しさん
2019/12/11(水) 00:40:26.36ID:H3x5MOt+ ランダムな引き算生成するawkバージョン
$ awk 'BEGIN{srand(); for (i=0; i<1000000; ++i) {print int(rand()*1000)"-"int(rand()*1000)}}' > input.txt
$ awk 'BEGIN{srand(); for (i=0; i<1000000; ++i) {print int(rand()*1000)"-"int(rand()*1000)}}' > input.txt
161デフォルトの名無しさん
2019/12/11(水) 00:46:42.05ID:5YQOA1oq お、こっちの方がわずかに速かった。スクリプトで計算させるよりも読み込み時に分割させたほうが良いんだろうな。
setを使って分割した場合は、setの呼び出しでコストがかかると思うけど
$ time sh -c 'IFS=-; while read i j; do [ $i -gt $j ] && echo "+$i-$j" || echo " $i-$j" ; done' < input.txt > output2.txt
real 0m7.866s
user 0m4.114s
sys 0m3.744s
setを使って分割した場合は、setの呼び出しでコストがかかると思うけど
$ time sh -c 'IFS=-; while read i j; do [ $i -gt $j ] && echo "+$i-$j" || echo " $i-$j" ; done' < input.txt > output2.txt
real 0m7.866s
user 0m4.114s
sys 0m3.744s
162デフォルトの名無しさん
2019/12/11(水) 00:53:02.45ID:mRJcWm57 $ time sh -c 'var=1-2; i=0; while [ $i -lt 1000000 ]; do [ $(($var)) -lt 0 ]; i=$((i+1)); done'
real 0m2.268s
user 0m2.264s
sys 0m0.004s
$ time { var=1-2; echo "i=0;while(i<=1000000){${var}<=0;i++;}" | bc > /dev/null; }
real 0m1.540s
user 0m1.175s
sys 0m0.366s
real 0m2.268s
user 0m2.264s
sys 0m0.004s
$ time { var=1-2; echo "i=0;while(i<=1000000){${var}<=0;i++;}" | bc > /dev/null; }
real 0m1.540s
user 0m1.175s
sys 0m0.366s
163デフォルトの名無しさん
2019/12/11(水) 00:54:49.86ID:5YQOA1oq > 対象の文字列は標準出力ではなくて変数に格納されています。
お前らこの条件忘れてるだろw
お前らこの条件忘れてるだろw
164デフォルトの名無しさん
2019/12/11(水) 01:39:58.92ID:5YQOA1oq うーん、よく考えるとこれ実際の要件を想定して
「それぞれのコマンドを使って処理をした結果を元に続きの処理をする」となると
差があまりなくなってしまうかもしれん
$ time sh -c 'while read var; do echo $(($var)); done' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.678s
user 0m9.059s
sys 0m4.427s
$ time awk -F "-" '{ print $1-$2 }' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.629s
user 0m6.358s
sys 0m1.580s
$ time bc < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.649s
user 0m6.869s
sys 0m2.006s
「それぞれのコマンドを使って処理をした結果を元に続きの処理をする」となると
差があまりなくなってしまうかもしれん
$ time sh -c 'while read var; do echo $(($var)); done' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.678s
user 0m9.059s
sys 0m4.427s
$ time awk -F "-" '{ print $1-$2 }' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.629s
user 0m6.358s
sys 0m1.580s
$ time bc < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.649s
user 0m6.869s
sys 0m2.006s
165デフォルトの名無しさん
2019/12/11(水) 01:44:25.40ID:5YQOA1oq $ time sh -c 'while read var; do [ $(($var)) -gt 0 ] && echo + || echo; done' < input.txt | while read i; do [ "$i" ]; done
real 0m7.596s
user 0m9.484s
sys 0m5.123s
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+" : "" }' < input.txt | while read i; do [ "$i" ]; done
real 0m5.418s
user 0m4.670s
sys 0m1.012s
real 0m7.596s
user 0m9.484s
sys 0m5.123s
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+" : "" }' < input.txt | while read i; do [ "$i" ]; done
real 0m5.418s
user 0m4.670s
sys 0m1.012s
166デフォルトの名無しさん
2019/12/11(水) 01:47:25.15ID:5YQOA1oq 結果をファイルに吐き出すだけなら良いんだけどね、
その結果をシェルスクリプトを使って処理する場合の話
その結果をシェルスクリプトを使って処理する場合の話
167デフォルトの名無しさん
2019/12/11(水) 03:39:07.57ID:MgOCMEvC >>151
今年出た i5 9500
プロセッサー・ベース動作周波数 3.00 GHz
ターボ・ブースト利用時の最大周波数 4.40 GHz
あんまり変わらない気がする
シェルスクリプトなんかスレッド使わないだろうし
今年出た i5 9500
プロセッサー・ベース動作周波数 3.00 GHz
ターボ・ブースト利用時の最大周波数 4.40 GHz
あんまり変わらない気がする
シェルスクリプトなんかスレッド使わないだろうし
168デフォルトの名無しさん
2019/12/11(水) 07:28:04.35ID:hRzITiR9169デフォルトの名無しさん
2019/12/11(水) 08:22:26.35ID:6UY8oXji >>145
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
によると
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_01_02_01
の一覧の内,sizeof()函数,++及び--単項演算子,Selection・Interation・Jumpは実装しなくてよい
とあるから>はPOSIXの範疇だと思います。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
によると
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_01_02_01
の一覧の内,sizeof()函数,++及び--単項演算子,Selection・Interation・Jumpは実装しなくてよい
とあるから>はPOSIXの範疇だと思います。
170デフォルトの名無しさん
2019/12/11(水) 12:44:26.62ID:MgOCMEvC >>168
そりゃプロセスだろ
そりゃプロセスだろ
171デフォルトの名無しさん
2019/12/11(水) 13:32:50.85ID:hRzITiR9 >>170
今はCPUの話だからハイパースレッディングのスレッドだろう
今はCPUの話だからハイパースレッディングのスレッドだろう
172デフォルトの名無しさん
2019/12/11(水) 13:55:32.35ID:hRzITiR9173デフォルトの名無しさん
2019/12/11(水) 15:18:53.13ID:++mq81bA174デフォルトの名無しさん
2019/12/11(水) 15:22:46.18ID:++mq81bA プロセスが別のコアで動くとかか??
スレッドをハイパースレッディングのスレッドを指すなんて初めてみた
スレッドをハイパースレッディングのスレッドを指すなんて初めてみた
175デフォルトの名無しさん
2019/12/11(水) 15:28:13.91ID:hRzITiR9176デフォルトの名無しさん
2019/12/11(水) 15:29:58.09ID:hRzITiR9 >>174
普通にCPUの所に4コア8スレッドって書いてあるからさ
https://kakaku.com/pc/cpu/itemlist.aspx?pdf_se=22&pdf_Spec306=4
普通にCPUの所に4コア8スレッドって書いてあるからさ
https://kakaku.com/pc/cpu/itemlist.aspx?pdf_se=22&pdf_Spec306=4
177デフォルトの名無しさん
2019/12/11(水) 15:39:31.82ID:++mq81bA そこまで出されるとマジでスレッドという意味で使ってたんだな
OSも知らないスレッドだろう、OSから見てもただのコアだろう
OSも知らないスレッドだろう、OSから見てもただのコアだろう
178デフォルトの名無しさん
2019/12/11(水) 15:46:36.17ID:hRzITiR9179デフォルトの名無しさん
2019/12/11(水) 15:55:15.40ID:++mq81bA 一行目なんて書かなきゃならないのね
>>167もそんなスレッドのことを言ってないだろうに。なんでかなw
プロセスじゃなくスレッドならプロセス起動する無駄時間がないとかそういう意味でのだろうし、そもそもスレッドはそういうために
元々のネタがプロセス起動にどれだけ食われてるのかという話だな、するなら
>>167もそんなスレッドのことを言ってないだろうに。なんでかなw
プロセスじゃなくスレッドならプロセス起動する無駄時間がないとかそういう意味でのだろうし、そもそもスレッドはそういうために
元々のネタがプロセス起動にどれだけ食われてるのかという話だな、するなら
180デフォルトの名無しさん
2019/12/11(水) 16:11:12.77ID:6UY8oXji >>172
なるほど。確かに準拠してませんでした,すいません。
なるほど。確かに準拠してませんでした,すいません。
181デフォルトの名無しさん
2019/12/11(水) 20:23:56.94ID:MgOCMEvC182デフォルトの名無しさん
2019/12/12(木) 01:47:04.79ID:4Chv4WTd183デフォルトの名無しさん
2019/12/12(木) 02:33:13.07ID:NtLqNRlV184デフォルトの名無しさん
2019/12/12(木) 02:40:24.09ID:n05Ewb3K CPUのスペック比較とシェルスクリプトでスレッド使わないという話とどう関係あるの?
新しいCPUはOSスレッドを効率的に実行できる機能でもあるの?
新しいCPUはOSスレッドを効率的に実行できる機能でもあるの?
185デフォルトの名無しさん
2019/12/12(木) 03:38:37.48ID:g+q4RhTJ そうだよな。CPUの話をしていたのに
なんでスレッド使うかどうかの話をしたのかだよな
> 今年出た i5 9500
> プロセッサー・ベース動作周波数 3.00 GHz
> ターボ・ブースト利用時の最大周波数 4.40 GHz
> あんまり変わらない気がする
>
> シェルスクリプトなんかスレッド使わないだろうし
なんでスレッド使うかどうかの話をしたのかだよな
> 今年出た i5 9500
> プロセッサー・ベース動作周波数 3.00 GHz
> ターボ・ブースト利用時の最大周波数 4.40 GHz
> あんまり変わらない気がする
>
> シェルスクリプトなんかスレッド使わないだろうし
186デフォルトの名無しさん
2019/12/12(木) 03:41:30.87ID:g+q4RhTJ スレッド使わなくてもコア使うから関係あるだろって言えばよかったのか?
i5 9500の名前を出したのは、コア6スレッド6だからだろ?
i5 9500の名前を出したのは、コア6スレッド6だからだろ?
187デフォルトの名無しさん
2019/12/12(木) 08:10:01.85ID:NtLqNRlV >>184
最新のCPUにしたところで周波数がちょっと早くなった程度で差が無いって話
新しいCPUは同時実行スレッド数が増えてるとか言う奴がいるけどシェルスクリプトには関係ないだろ?
「どう関係あるの? 」とか言われても「関係ない」って最初から書いてんのに読めない訳?
最新のCPUにしたところで周波数がちょっと早くなった程度で差が無いって話
新しいCPUは同時実行スレッド数が増えてるとか言う奴がいるけどシェルスクリプトには関係ないだろ?
「どう関係あるの? 」とか言われても「関係ない」って最初から書いてんのに読めない訳?
188デフォルトの名無しさん
2019/12/12(木) 08:11:55.05ID:NtLqNRlV189デフォルトの名無しさん
2019/12/12(木) 09:49:29.49ID:AVYkL4QT 本気でシェルスクリプトとコアが関係ないと思ってるのか?
パイプ使ったら複数コア使うことになるんだが
例えばcat ファイル名 | grep なんとか ってやると
catのファイル表示と、grepが並列で動く
あとバックグラウンド実行もあるよね
自分が並列で動くものを書いてないからって、
シェルスクリプトと並列が関係ないわけじゃないだろ
自分が書かないって話をするならC言語だってコアは関係ない
パイプ使ったら複数コア使うことになるんだが
例えばcat ファイル名 | grep なんとか ってやると
catのファイル表示と、grepが並列で動く
あとバックグラウンド実行もあるよね
自分が並列で動くものを書いてないからって、
シェルスクリプトと並列が関係ないわけじゃないだろ
自分が書かないって話をするならC言語だってコアは関係ない
190デフォルトの名無しさん
2019/12/12(木) 09:52:07.59ID:AVYkL4QT あと、xargsとかGNU parallelとか
191デフォルトの名無しさん
2019/12/12(木) 10:19:43.03ID:mtFqZIGW それはプロセスレベルの並列化のお話。スレッドの話はどこいった?
192デフォルトの名無しさん
2019/12/12(木) 10:24:13.74ID:AVYkL4QT シェルスクリプトで外部コマンドを使わない場合の話でもしてるのか?
シェルスクリプトでパイプを使わないならコアは関係ない!
そんな事ありえないけど関係ないんだ!
みたいな話したってしょうがないだろ
それにパイプ使うのは foo | bar | baz みたいなシェル関数でも使えるし
シェル関数の中身はそれぞれこんな感じな
while read line
do
省略
done < ファイル名
外部コマンド一切なし
シェルスクリプトでパイプを使わないならコアは関係ない!
そんな事ありえないけど関係ないんだ!
みたいな話したってしょうがないだろ
それにパイプ使うのは foo | bar | baz みたいなシェル関数でも使えるし
シェル関数の中身はそれぞれこんな感じな
while read line
do
省略
done < ファイル名
外部コマンド一切なし
193デフォルトの名無しさん
2019/12/12(木) 10:24:48.46ID:AVYkL4QT >>191
今はCPUコアの話
今はCPUコアの話
194デフォルトの名無しさん
2019/12/12(木) 12:23:33.66ID:NxSFhA/k >コア6スレッド6だからだろ
それを言うならスレッド12だろ。ハイパースレッディングでスペック表すときの論理コア数をスレッドと言っているにすぎないだろうに
いつものやつが絡んでるだけだろうな、すぐに話を逸らすことからも
それを言うならスレッド12だろ。ハイパースレッディングでスペック表すときの論理コア数をスレッドと言っているにすぎないだろうに
いつものやつが絡んでるだけだろうな、すぐに話を逸らすことからも
195デフォルトの名無しさん
2019/12/12(木) 12:43:03.31ID:NxSFhA/k196デフォルトの名無しさん
2019/12/12(木) 12:57:42.86ID:NxSFhA/k >>195,183
>まあ、シェル自体はスレッドを使ってることもあるだろう、いまどき
いや、いまどきも1シェルプロセスは1スレッドしかなのか。仮にスレッド使う場合があったとしてもどういう場合というのはわからんな
確認せずにいまどきならと書いた、すまん
>まあ、シェル自体はスレッドを使ってることもあるだろう、いまどき
いや、いまどきも1シェルプロセスは1スレッドしかなのか。仮にスレッド使う場合があったとしてもどういう場合というのはわからんな
確認せずにいまどきならと書いた、すまん
197デフォルトの名無しさん
2019/12/12(木) 16:08:19.94ID:AVYkL4QT198デフォルトの名無しさん
2019/12/12(木) 16:10:23.64ID:AVYkL4QT199デフォルトの名無しさん
2019/12/12(木) 16:11:47.38ID:AVYkL4QT200デフォルトの名無しさん
2019/12/12(木) 16:24:20.77ID:AVYkL4QT ちなみに>>164-165とかはパイプを使ってるのでコア数は意味がある
例えばこれだとshプロセスが2つ起動して、それぞれCPUコアを使っている
time sh -c 'while read var; do echo $(($var)); done < input.txt | while read i; do [ $i -lt 0 ]; done'
例えばこれだとshプロセスが2つ起動して、それぞれCPUコアを使っている
time sh -c 'while read var; do echo $(($var)); done < input.txt | while read i; do [ $i -lt 0 ]; done'
201デフォルトの名無しさん
2019/12/12(木) 16:41:19.05ID:1H8k0UmA 自己文書化(?)されたシェルスクリプトの例
http://www.tip.net.au/wiki/index.php/Self_documenting_bash_script_options
もうちょっと洗練して、例えばhelp関数から実行するときはgettoptsコマンドを
ヘルプ出力用に書換えたものにするなんてこともできそう。
http://www.tip.net.au/wiki/index.php/Self_documenting_bash_script_options
もうちょっと洗練して、例えばhelp関数から実行するときはgettoptsコマンドを
ヘルプ出力用に書換えたものにするなんてこともできそう。
202デフォルトの名無しさん
2019/12/12(木) 16:43:22.79ID:AVYkL4QT203デフォルトの名無しさん
2019/12/12(木) 16:49:53.62ID:mtFqZIGW $ seq 1 inf | tail
を実行して別のターミナルで
$ top -1
を実行してみる。f キーを押して fields management 画面に進んで
"Last Used Cpu" を選んで表示させる様にするとプロセスがどの
CPUコアで実行されているか表示される
を実行して別のターミナルで
$ top -1
を実行してみる。f キーを押して fields management 画面に進んで
"Last Used Cpu" を選んで表示させる様にするとプロセスがどの
CPUコアで実行されているか表示される
204デフォルトの名無しさん
2019/12/12(木) 17:08:05.32ID:1H8k0UmA205デフォルトの名無しさん
2019/12/12(木) 17:46:32.53ID:3GyD1b3F206デフォルトの名無しさん
2019/12/12(木) 17:46:52.23ID:AVYkL4QT >>204
ああ、ヘルプの自動生成か。悩むところだよね。
簡単なのなら確かにそのリンク先みたいにできるだろうけど
時々例外的なコードはいるしさ、
とういうかリンク先、なんであんなよくわからんコードなんだ?
もっと簡潔にかけそうなんだが
txmp.txt? zenity?ん??GUI表示するため?
ああ、ヘルプの自動生成か。悩むところだよね。
簡単なのなら確かにそのリンク先みたいにできるだろうけど
時々例外的なコードはいるしさ、
とういうかリンク先、なんであんなよくわからんコードなんだ?
もっと簡潔にかけそうなんだが
txmp.txt? zenity?ん??GUI表示するため?
207デフォルトの名無しさん
2019/12/12(木) 17:48:26.91ID:AVYkL4QT208デフォルトの名無しさん
2019/12/12(木) 17:53:26.87ID:AVYkL4QT 試しに書いてみようかと思ってコピペしようとしたら画像やしw
209デフォルトの名無しさん
2019/12/12(木) 18:02:50.61ID:CkUjiG2X >>207
今回のハイパースレッディングでのスレッドを言い出し絡みまくりからは、ないな
今回のハイパースレッディングでのスレッドを言い出し絡みまくりからは、ないな
210デフォルトの名無しさん
2019/12/12(木) 18:16:03.44ID:n05Ewb3K211デフォルトの名無しさん
2019/12/12(木) 18:21:26.57ID:CkUjiG2X >>210
ん?オプティマイズが仮にあったとしても並列はしないだろう、あの文では
並列にになるように書いた「別の」スクリプトとは別の話だけど?
「え?」じゃなくどうスレッドの効果があるように思うの?みんなはスッキリするかもwだが俺はもやもやもやもやするぞw
ん?オプティマイズが仮にあったとしても並列はしないだろう、あの文では
並列にになるように書いた「別の」スクリプトとは別の話だけど?
「え?」じゃなくどうスレッドの効果があるように思うの?みんなはスッキリするかもwだが俺はもやもやもやもやするぞw
212デフォルトの名無しさん
2019/12/12(木) 18:22:28.30ID:AVYkL4QT >>201
やっつけ仕事w もっと正規表現頑張れば短くできそうだけど、やる気なしw
#!/bin/sh
print_opts() {
sed -nE '/\s+###START/,/\s+###END/ p' < "$1" | while read line; do
case $line in
"###"*) ;;
[0-9a-zA-Z]*)
echo -n "-${line%%)*}"
case $line in *"#"*) echo -n "${line#*#}"; esac
echo
;;
"#"*) echo " ${line#*#}" ;;
esac
done
}
while getopts "h456" optionName; do
case $optionName in
###START
h) print_opts "$0" ;;
4) ;; # negate
5) ;; # colorspace COLOR
# COLOR: RED ro GREEN or BLUE
6) ;; # sepia-tone
###END
esac
done
やっつけ仕事w もっと正規表現頑張れば短くできそうだけど、やる気なしw
#!/bin/sh
print_opts() {
sed -nE '/\s+###START/,/\s+###END/ p' < "$1" | while read line; do
case $line in
"###"*) ;;
[0-9a-zA-Z]*)
echo -n "-${line%%)*}"
case $line in *"#"*) echo -n "${line#*#}"; esac
echo
;;
"#"*) echo " ${line#*#}" ;;
esac
done
}
while getopts "h456" optionName; do
case $optionName in
###START
h) print_opts "$0" ;;
4) ;; # negate
5) ;; # colorspace COLOR
# COLOR: RED ro GREEN or BLUE
6) ;; # sepia-tone
###END
esac
done
213デフォルトの名無しさん
2019/12/12(木) 18:26:08.31ID:AVYkL4QT >>211
今シェルスクリプトの話をしてるんですよ?
という言い方をしておいて、特定のシェルスクリプトコードの話になるわけないし
例えばC言語で使うのは1コアだけだろうがと言われても「は?」としか思わん。
言ったあとで「特定のC言語のコードのことだよ」って弁解してもねw
最初からシェルスクリプトで並列処理できないと思ってたのバレバレだから
今シェルスクリプトの話をしてるんですよ?
という言い方をしておいて、特定のシェルスクリプトコードの話になるわけないし
例えばC言語で使うのは1コアだけだろうがと言われても「は?」としか思わん。
言ったあとで「特定のC言語のコードのことだよ」って弁解してもねw
最初からシェルスクリプトで並列処理できないと思ってたのバレバレだから
214デフォルトの名無しさん
2019/12/12(木) 18:33:38.18ID:CkUjiG2X215デフォルトの名無しさん
2019/12/12(木) 18:38:11.60ID:CkUjiG2X216デフォルトの名無しさん
2019/12/12(木) 18:57:21.35ID:CkUjiG2X CPU使い尽くす>>167改変版(やっつけ)
numparallels=8
time zsh -c 'var=1-2; sub () { i=0; while [ $i -lt '$((1000000 / $numparallels))' ]; do [ $(($var)) -lt 0 ]; : $((++i)); done; cat; echo "$1:$i" }; echo'"$(printf " | sub %d" $(seq $numparallels))"
まあ、やってることは何もないので分割並列しても何も問題ないが(そもそもスクリプトの目的としては問題ある)、仮にオプティマイズなんぞがあってもこんなことはしない(だろう)
現在のシェルはsubがプロセスだがスレッドを使っていたりしても、しないだろう
「え?」って何か他にスレッドの効果を出すやり方あるかなあ??スレッドを使ったとして
numparallels=8
time zsh -c 'var=1-2; sub () { i=0; while [ $i -lt '$((1000000 / $numparallels))' ]; do [ $(($var)) -lt 0 ]; : $((++i)); done; cat; echo "$1:$i" }; echo'"$(printf " | sub %d" $(seq $numparallels))"
まあ、やってることは何もないので分割並列しても何も問題ないが(そもそもスクリプトの目的としては問題ある)、仮にオプティマイズなんぞがあってもこんなことはしない(だろう)
現在のシェルはsubがプロセスだがスレッドを使っていたりしても、しないだろう
「え?」って何か他にスレッドの効果を出すやり方あるかなあ??スレッドを使ったとして
217デフォルトの名無しさん
2019/12/12(木) 19:01:40.02ID:AVYkL4QT218デフォルトの名無しさん
2019/12/12(木) 19:04:56.67ID:AVYkL4QT219デフォルトの名無しさん
2019/12/12(木) 19:06:01.30ID:CkUjiG2X220デフォルトの名無しさん
2019/12/12(木) 19:23:11.97ID:AVYkL4QT 語彙がおかしくなってる(笑)
221デフォルトの名無しさん
2019/12/12(木) 19:24:18.99ID:CkUjiG2X こういうやつwww
222デフォルトの名無しさん
2019/12/12(木) 22:51:40.18ID:1H8k0UmA223デフォルトの名無しさん
2019/12/13(金) 02:20:43.65ID:ysGzQi5M >>222
書いていて思ったけど、リンク先のやつ
s=$s" -negate" のsの使い方がわからんのよね
その後どう処理するか
それを入れるともっと複雑になるはずだが
それが書いてないからシンプルに見えちゃう
シェルスクリプトに限らないけど、オプション解析ライブラリはヘルプを
自動で作ろうとするけどそのヘルプを詳しく書こうとするととたんに見づらくなる気がする。
横にに長くなるんだよね。
逆の発想でPythonではヘルプを解析してオプション解析コードを生成するdocoptというものがある。
これのシェルスクリプト版でdocoptsというのもあるけど内部でgoバイナリを呼び出してて
シェルスクリプトネイティブじゃないのでちょっとダサい実装だったはず
https://github.com/docopt/docopts
こっちのほうが良い気がしてるがやっぱりヘルプにこだわりだすと、うーんって感じなので
結局、catで出力する方法で落ち着いてる。↓これね
cat<<HERE
Usage: ・・・
-a, --aaa aaaaaa
HERE
書いていて思ったけど、リンク先のやつ
s=$s" -negate" のsの使い方がわからんのよね
その後どう処理するか
それを入れるともっと複雑になるはずだが
それが書いてないからシンプルに見えちゃう
シェルスクリプトに限らないけど、オプション解析ライブラリはヘルプを
自動で作ろうとするけどそのヘルプを詳しく書こうとするととたんに見づらくなる気がする。
横にに長くなるんだよね。
逆の発想でPythonではヘルプを解析してオプション解析コードを生成するdocoptというものがある。
これのシェルスクリプト版でdocoptsというのもあるけど内部でgoバイナリを呼び出してて
シェルスクリプトネイティブじゃないのでちょっとダサい実装だったはず
https://github.com/docopt/docopts
こっちのほうが良い気がしてるがやっぱりヘルプにこだわりだすと、うーんって感じなので
結局、catで出力する方法で落ち着いてる。↓これね
cat<<HERE
Usage: ・・・
-a, --aaa aaaaaa
HERE
224デフォルトの名無しさん
2019/12/13(金) 02:37:48.49ID:r2S5lo/C HERE よりその文章全体の要約がUSAGEなので
END_USAGE とかにしたほうがちょっと読みやすい
END_USAGE とかにしたほうがちょっと読みやすい
225デフォルトの名無しさん
2019/12/13(金) 03:28:44.87ID:ysGzQi5M END_USAGEからはじまるで?
226デフォルトの名無しさん
2019/12/13(金) 12:27:46.56ID:aQIhFndX 素人がここで訊くのはアレだがコマンドのオプションってなんでああもガバガバなの
lsは-hvlみたいにまとめられるしどこにでも指定できるじゃない
shortとlongで仕様を決めたらしいがfindからして従ってないし
ddはそもそも出自が違うらしいから異質でも納得だけども
lsは-hvlみたいにまとめられるしどこにでも指定できるじゃない
shortとlongで仕様を決めたらしいがfindからして従ってないし
ddはそもそも出自が違うらしいから異質でも納得だけども
227デフォルトの名無しさん
2019/12/13(金) 16:35:44.26ID:oSsH2Kni >>222
偉そうな言い方になるけど,もしあのスクリプトの
[ ${_helpcnt:-0} -ge 1 ] && \
{ optdoc 'オプションtの解説'; continue; }
という部分が
helpdoc 'オプションtの解説'
みたいに一コマンドで完結していれば使いたくなったかも。
ところが関数の中でcontinueを使うと効果なくなるのよね……w
偉そうな言い方になるけど,もしあのスクリプトの
[ ${_helpcnt:-0} -ge 1 ] && \
{ optdoc 'オプションtの解説'; continue; }
という部分が
helpdoc 'オプションtの解説'
みたいに一コマンドで完結していれば使いたくなったかも。
ところが関数の中でcontinueを使うと効果なくなるのよね……w
228デフォルトの名無しさん
2019/12/13(金) 18:58:27.09ID:ysGzQi5M 個人的にはgetoptsはロングオプションが使えないから
それだけで候補にはならんなぁ
かと言ってgetoptはロングオプション使えるけど、
数を増やすと一行がどんどん長くなってしまうw
それだけで候補にはならんなぁ
かと言ってgetoptはロングオプション使えるけど、
数を増やすと一行がどんどん長くなってしまうw
229デフォルトの名無しさん
2019/12/13(金) 19:44:00.66ID:oSsH2Kni 寧ろgetoptはPOSIXに準拠しなくなってしまうから嫌だな。
コマンドの主要な部分でどうしても非POSIXコマンドに頼らざる得ないとかならともかく
オプション解析っていう割と副次的な部分の機能を高めるが為にわざわざ標準から逸脱したくない。
(あんまり拘るとキリないけどw)
コマンドの主要な部分でどうしても非POSIXコマンドに頼らざる得ないとかならともかく
オプション解析っていう割と副次的な部分の機能を高めるが為にわざわざ標準から逸脱したくない。
(あんまり拘るとキリないけどw)
230デフォルトの名無しさん
2019/12/13(金) 19:51:43.71ID:ysGzQi5M あ、getoptが良いって言ってるわけじゃないよw
getoptはロングオプションが使えるってのは
一見良いように思えるけど、引数が長くなるから
getoptsが一文字なのは、あえてそうなってるかもなってこと
getoptはロングオプションが使えるってのは
一見良いように思えるけど、引数が長くなるから
getoptsが一文字なのは、あえてそうなってるかもなってこと
231デフォルトの名無しさん
2019/12/13(金) 19:55:08.60ID:ysGzQi5M あとgetoptsもgetoptもだけどさ
使うことでオプション解析って楽になってる?
使わないで独自解析してるのも見かけるけどそれと大差ないように感じる
何が嬉しくてgetoptsもgetoptを使うんだろう?
使うことでオプション解析って楽になってる?
使わないで独自解析してるのも見かけるけどそれと大差ないように感じる
何が嬉しくてgetoptsもgetoptを使うんだろう?
232デフォルトの名無しさん
2019/12/13(金) 21:32:49.16ID:oSsH2Kni そりゃ多少なりとも手間が省けるからじゃない?
たしかに結局whileやらcase文やら多用してるから大差ないように思えるけど
-abc←こういう一つのハイフンの後に複数のオプションが指定されている場合を考慮したり
オプション引数があるときはshiftする個数変えたり……
みたいなことは少なくとも俺のような頭の弱い人間には保守・管理しにくい。
経験上,getoptsが使われている場合は,
自前でオプション解析してる場合よりも常套的な構文が使われてる(もうほぼほぼwhileとcaseの入れ子)
から,gettoptsによるオプション解析の部分は読み飛ばしてもOKっていうのは気分が楽w
たしかに結局whileやらcase文やら多用してるから大差ないように思えるけど
-abc←こういう一つのハイフンの後に複数のオプションが指定されている場合を考慮したり
オプション引数があるときはshiftする個数変えたり……
みたいなことは少なくとも俺のような頭の弱い人間には保守・管理しにくい。
経験上,getoptsが使われている場合は,
自前でオプション解析してる場合よりも常套的な構文が使われてる(もうほぼほぼwhileとcaseの入れ子)
から,gettoptsによるオプション解析の部分は読み飛ばしてもOKっていうのは気分が楽w
233デフォルトの名無しさん
2019/12/14(土) 11:52:21.09ID:gTK06/8e POSIX man(開発段階)の仕様書に
各企業が「よりよいヘルプ体系」(“better help system”)を付け加えることに意欲的である
っていう文章があるんだけど
このよりよいヘルプ体系について具体的に論じてるページとか知りませんか。
各企業が「よりよいヘルプ体系」(“better help system”)を付け加えることに意欲的である
っていう文章があるんだけど
このよりよいヘルプ体系について具体的に論じてるページとか知りませんか。
234デフォルトの名無しさん
2019/12/14(土) 12:02:40.53ID:q2HhYeOb ドキュメントはもうウェブサイトで用意したほうが良いよ
235デフォルトの名無しさん
2019/12/14(土) 20:55:20.00ID:gTK06/8e236デフォルトの名無しさん
2019/12/14(土) 21:20:20.57ID:6YH7rFov オフラインダウンロード機能でもあればいいだけじゃん
manの表現力は低いわけだし、いまどき画像表示できるマシンを
誰だって持ってるのに、テキストベースに拘る必要はない
開発者とかろくにメンテしないし、多言語化なんてまず無理
wikipediaのマニュアル特化型みたいにして一元管理
MDNが特定のブラウザの特定バージョンでの実装まで書いてあるのと同じように
バージョン違いもLinux版とかBSD版の違いも全部網羅したほうが良いよ。
古いバージョンのドキュメントは、新しい機能のことまで書いてないしね。
ドキュメントは分離して最新のものを常に更新していったほうが良い
manの表現力は低いわけだし、いまどき画像表示できるマシンを
誰だって持ってるのに、テキストベースに拘る必要はない
開発者とかろくにメンテしないし、多言語化なんてまず無理
wikipediaのマニュアル特化型みたいにして一元管理
MDNが特定のブラウザの特定バージョンでの実装まで書いてあるのと同じように
バージョン違いもLinux版とかBSD版の違いも全部網羅したほうが良いよ。
古いバージョンのドキュメントは、新しい機能のことまで書いてないしね。
ドキュメントは分離して最新のものを常に更新していったほうが良い
237デフォルトの名無しさん
2019/12/14(土) 23:05:33.87ID:gTK06/8e まあ「いつのバージョンについていつ書かれたものか」みたいなのは簡単に確認できるようになるといいね。
RDFとか利用するとWebとの相性も良さそう。
RDFとか利用するとWebとの相性も良さそう。
238デフォルトの名無しさん
2019/12/15(日) 02:19:32.16ID:a0yEED8b >>237
バージョン間で違いが大きすぎるのは別として、
ドキュメント一つで全バージョンを網羅すべきだと思う
このオプションはバージョンいくつ以上から使用可能ですとか
ドキュメントにおいて存在すべきなのは最新のドキュメント一つのみ
バージョンや特定の実装に依存しない。
シェルでもdash用とかbash用とか別々に作るのは無駄だよ。
この機能はbash専用ですとか書いてあれば、一つ見るだけでよくなるし注意点もわかる
別々に作られてたら、あれこれdashで使えるんだっけ?とかなるし
バージョン間で違いが大きすぎるのは別として、
ドキュメント一つで全バージョンを網羅すべきだと思う
このオプションはバージョンいくつ以上から使用可能ですとか
ドキュメントにおいて存在すべきなのは最新のドキュメント一つのみ
バージョンや特定の実装に依存しない。
シェルでもdash用とかbash用とか別々に作るのは無駄だよ。
この機能はbash専用ですとか書いてあれば、一つ見るだけでよくなるし注意点もわかる
別々に作られてたら、あれこれdashで使えるんだっけ?とかなるし
239デフォルトの名無しさん
2019/12/15(日) 03:19:52.38ID:woT0VW+T240デフォルトの名無しさん
2019/12/15(日) 04:20:02.09ID:3SLEzfiL241デフォルトの名無しさん
2019/12/15(日) 04:35:07.70ID:a0yEED8b >>240
wikipedia方式で良いんじゃね?
wikipedia方式で良いんじゃね?
242デフォルトの名無しさん
2019/12/15(日) 10:01:39.28ID:E44EqLgR Wikipedia方式ってのがよく分からんけど
かなり自由に編集できて,既定で最新版が表示されるけど変更履歴が辿れるっていう方式ならいいね。
↑これはwiki全般に言えることだから寧ろコマンドwikiって言ったほうが適切か。
で,Wikipediaの方針をもっと厳しくして
様式を完全に統一したり典拠や変更コメントを必須にしたりしたら
自由に編集できる利点はそのまましっかりした文書になりそう。
という訳で誰かそういうwiki作ってw
かなり自由に編集できて,既定で最新版が表示されるけど変更履歴が辿れるっていう方式ならいいね。
↑これはwiki全般に言えることだから寧ろコマンドwikiって言ったほうが適切か。
で,Wikipediaの方針をもっと厳しくして
様式を完全に統一したり典拠や変更コメントを必須にしたりしたら
自由に編集できる利点はそのまましっかりした文書になりそう。
という訳で誰かそういうwiki作ってw
243デフォルトの名無しさん
2019/12/15(日) 11:36:59.02ID:pTp+dpJs 必要性を感じた者がやるんだよ! 頑張れ!
244デフォルトの名無しさん
2019/12/16(月) 00:44:09.03ID:5wUpgmce 日本語manだけ更新日が1990年代
英語manだけなぜかBSD版
--helpと言ってることが違う
これ食らってから正直manには期待していない
infoの日本語化って無理なのか?あっちも使いにくいが
英語manだけなぜかBSD版
--helpと言ってることが違う
これ食らってから正直manには期待していない
infoの日本語化って無理なのか?あっちも使いにくいが
245デフォルトの名無しさん
2019/12/16(月) 07:48:45.99ID:4GuGuHT1 逆になぜinfoは信頼できると思ったのか
246デフォルトの名無しさん
2019/12/17(火) 13:48:36.21ID:BxEORdhA infoを使用すると完全なマニュアルを読むことができるはずだ。ってmanにあるくせにそれ言うのか
247デフォルトの名無しさん
2019/12/17(火) 22:02:31.85ID:kdkfgKcy >>244
なければ作るとよい
なければ作るとよい
248デフォルトの名無しさん
2019/12/18(水) 18:56:56.67ID:Cw3S1jU2 manはそんなに難しい英語ではない
マニュアルとしてはとてもよく書けている
これを英語で読めないんだと、そもそもマニュアルを
読み取るのが難しい国語レベルかと
マニュアルとしてはとてもよく書けている
これを英語で読めないんだと、そもそもマニュアルを
読み取るのが難しい国語レベルかと
249デフォルトの名無しさん
2019/12/18(水) 19:39:48.69ID:uFDqtnkl 日本語の問題とman自身の問題は別の話でしょう?
英語圏の人がmanを使ったときの問題は
テキストベースだから使いづらい。
HTMLではないから使いづらい。
画像がないから分かりづらい。
そういった点でしょう?
日本語の問題はワークフローの問題だよ。
まず世の中英語と日本語だけじゃない無数に言語がある。
アプリの新バージョンを作ったときに翻訳してからじゃないとリリースできない
ってのは無いと思うし、翻訳だけしたらバージョンアップというのもおかしな話
(例えば--helpの内容とか)
アプリとそのマニュアルは本来別でリリースすべきなんだろう
英語圏の人がmanを使ったときの問題は
テキストベースだから使いづらい。
HTMLではないから使いづらい。
画像がないから分かりづらい。
そういった点でしょう?
日本語の問題はワークフローの問題だよ。
まず世の中英語と日本語だけじゃない無数に言語がある。
アプリの新バージョンを作ったときに翻訳してからじゃないとリリースできない
ってのは無いと思うし、翻訳だけしたらバージョンアップというのもおかしな話
(例えば--helpの内容とか)
アプリとそのマニュアルは本来別でリリースすべきなんだろう
250デフォルトの名無しさん
2019/12/19(木) 10:03:23.50ID:y7Q/2NKF マニュアルとプログラム本体が一緒くたにされてる今でもマニュアルの内容が古いとか
書いてることと実際の動作が違うとか問題が多発してるのに
分けようなんて言いだしたらもはや二者の乖離が酷すぎて、だれもマニュアルなんて読もうとしなくなる
……っは!もしやそれが狙いか?w
書いてることと実際の動作が違うとか問題が多発してるのに
分けようなんて言いだしたらもはや二者の乖離が酷すぎて、だれもマニュアルなんて読もうとしなくなる
……っは!もしやそれが狙いか?w
251デフォルトの名無しさん
2019/12/19(木) 11:24:35.20ID:belDjs1+ まぁ指摘される度にお前がやれだの英語で読めだの言うけどそれ諦めてるよね
逃げ口上というか捨て台詞というか負け惜しみというか
逃げ口上というか捨て台詞というか負け惜しみというか
252デフォルトの名無しさん
2019/12/19(木) 16:35:50.82ID:jArWapvD OSS
言い出しっぺがやるというだけだろ
指摘ってなにが目的なんだか。俺がか?
言い出しっぺがやるというだけだろ
指摘ってなにが目的なんだか。俺がか?
253デフォルトの名無しさん
2019/12/19(木) 18:30:09.45ID:4hkxYlHE bashで関数名に使える文字と使えない文字ってこれであってる?
・使える
アルファベット、ASCII文字以外 (制御文字は知らんw)
- = ~ [ ] : , . _ /
% (ジョブ機能が有効だと呼び出せない?)
数字 @ (単体はダメ)
# ^ { } (始まっているものはダメ)
+ * ?(終わるものはダメ)
・使えない
! " $ & ' ( ) \ | ` < > ; スペース
何だこのカオスwww
・使える
アルファベット、ASCII文字以外 (制御文字は知らんw)
- = ~ [ ] : , . _ /
% (ジョブ機能が有効だと呼び出せない?)
数字 @ (単体はダメ)
# ^ { } (始まっているものはダメ)
+ * ?(終わるものはダメ)
・使えない
! " $ & ' ( ) \ | ` < > ; スペース
何だこのカオスwww
254デフォルトの名無しさん
2019/12/19(木) 18:38:08.39ID:UoMpZOx6 関数名には記号を使わないのが基本だ
使っていいのは _ ぐらい
あとは紛らわしくてしょうがない
可読性が著しく下がる
使っていいのは _ ぐらい
あとは紛らわしくてしょうがない
可読性が著しく下がる
255デフォルトの名無しさん
2019/12/21(土) 20:28:47.93ID:X9+p8H27 func() {
foo "123$@"
}
って書いて、func a b c と実行すると
foo 123a b c という呼び出しになるという仕様
奇妙だなって思ってたけど理由に気づいた
func() {
tar "v$@"
}
func zxf file.tar.gz ってやった時
tar vzxf file.tar.gz とするために必要な仕様なんだ
はー、よくできてんなー。
シェルスクリプトってなんとなくいきあたりばったりで
作られたように見えるのによく練られた仕様だと思うよ
foo "123$@"
}
って書いて、func a b c と実行すると
foo 123a b c という呼び出しになるという仕様
奇妙だなって思ってたけど理由に気づいた
func() {
tar "v$@"
}
func zxf file.tar.gz ってやった時
tar vzxf file.tar.gz とするために必要な仕様なんだ
はー、よくできてんなー。
シェルスクリプトってなんとなくいきあたりばったりで
作られたように見えるのによく練られた仕様だと思うよ
256デフォルトの名無しさん
2019/12/22(日) 11:21:06.45ID:JDtuJK73 むしろそうじゃない方が例外的な動作で奇妙に見えるけど
""の内側で$@は引数に展開されるし
"str$var"←こういう引用符だったら文字列と引数はくっ付いて表示される。
""の内側で$@は引数に展開されるし
"str$var"←こういう引用符だったら文字列と引数はくっ付いて表示される。
257デフォルトの名無しさん
2019/12/22(日) 11:45:14.20ID:JDtuJK73 sedでC言語中の#includeディレクティブを無効化したいんだけど
sed \
-e ':a' -e '/^#[[:blank:]]*include.*\\$/N;/\\\n/d;ta' \
-e '/^#[[:blank:]]*include.*/d'
↑これで対処できるかな。
sed \
-e ':a' -e '/^#[[:blank:]]*include.*\\$/N;/\\\n/d;ta' \
-e '/^#[[:blank:]]*include.*/d'
↑これで対処できるかな。
258デフォルトの名無しさん
2019/12/22(日) 12:51:34.17ID:O05uH48x259デフォルトの名無しさん
2019/12/22(日) 15:12:02.64ID:JDtuJK73 >>258
なるほど。
ただ、$@って配列変数じゃない気がするわ。
単に引数が空白区切りで格納されてるだけで。
↑じゃあ配列と何が違うんだと言われると難しいけどw
配列だとおこりえない挙動を示せるいい例が思い付かないので。
なるほど。
ただ、$@って配列変数じゃない気がするわ。
単に引数が空白区切りで格納されてるだけで。
↑じゃあ配列と何が違うんだと言われると難しいけどw
配列だとおこりえない挙動を示せるいい例が思い付かないので。
260デフォルトの名無しさん
2019/12/22(日) 15:49:52.02ID:9GUBQyj0 >>257
t は s の結果に依存するのでそこで使うのは適切ではないと思われる。
sed でやるならこんな感じか。
#!/bin/sed -f
/^#[[:blank:]]*include/!b
:L0
/\\$/{N;b L0}
d
t は s の結果に依存するのでそこで使うのは適切ではないと思われる。
sed でやるならこんな感じか。
#!/bin/sed -f
/^#[[:blank:]]*include/!b
:L0
/\\$/{N;b L0}
d
261デフォルトの名無しさん
2019/12/22(日) 16:03:17.69ID:XO28QfbO 削除じゃなくてコメントにしちゃうとか
sed -e '/^#[[:blank:]]*include.*\\$/,/[^\\]$/s:^://:' \
-e 's:^#[[:blank:]]*include://&:'
sed -e '/^#[[:blank:]]*include.*\\$/,/[^\\]$/s:^://:' \
-e 's:^#[[:blank:]]*include://&:'
262デフォルトの名無しさん
2019/12/22(日) 17:46:01.65ID:O05uH48x263デフォルトの名無しさん
2019/12/22(日) 18:25:06.92ID:M+q9E136 >>255
必要な仕様というよりシンプルな文字列展開としてはそうなるというだけでは
その例はたまたまそういうように使えるというだけのような
あえて賢い対応してるなと言うなら "v""$@" とか書く必要がないとこかな
必要な仕様というよりシンプルな文字列展開としてはそうなるというだけでは
その例はたまたまそういうように使えるというだけのような
あえて賢い対応してるなと言うなら "v""$@" とか書く必要がないとこかな
264デフォルトの名無しさん
2019/12/23(月) 15:40:09.98ID:YJsAIsu8 シェル組み込みのgetoptsを同一処理内で二回以上用いるときに
$OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
dashみたいにgetoptsを内蔵していないシェルでは
外部コマンドとしてgetopts(1)を起動した瞬間に$OPTIND変数が初期化されるみたい。
BashやらKshみたく組込みgetoptsを内蔵してるシェルの、
それも関数を跨がない処理
(getoptsを使ってる関数から一度も抜けることなく再度使用)
の時だけ$OPTIND変数が初期化されないみたいで、
そのせいで不本意な挙動の原因が掴めず半時間ほど無駄にしたw
(dashだと問題ないし、Bashでも特定の箇所でだけ不具合が生じるから)
$OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
dashみたいにgetoptsを内蔵していないシェルでは
外部コマンドとしてgetopts(1)を起動した瞬間に$OPTIND変数が初期化されるみたい。
BashやらKshみたく組込みgetoptsを内蔵してるシェルの、
それも関数を跨がない処理
(getoptsを使ってる関数から一度も抜けることなく再度使用)
の時だけ$OPTIND変数が初期化されないみたいで、
そのせいで不本意な挙動の原因が掴めず半時間ほど無駄にしたw
(dashだと問題ないし、Bashでも特定の箇所でだけ不具合が生じるから)
265デフォルトの名無しさん
2019/12/23(月) 15:55:18.14ID:YJsAIsu8 >>262
どういう要件を見たせば
ある変数が配列変数だって言えるのか知ってる?
(俺は知らん。でもプログラミング言語論とかで定義されてそう)
$@がその要件を満たしてれば配列に違いないね。
でもそういう明確な定義が無いなら
もう個人の勝手なんじゃないかな。
どういう要件を見たせば
ある変数が配列変数だって言えるのか知ってる?
(俺は知らん。でもプログラミング言語論とかで定義されてそう)
$@がその要件を満たしてれば配列に違いないね。
でもそういう明確な定義が無いなら
もう個人の勝手なんじゃないかな。
266デフォルトの名無しさん
2019/12/23(月) 16:20:51.38ID:CGg4xw4r >>264
> $OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
当たり前だな。どこに状態を保存してるのかと
> dashみたいにgetoptsを内蔵していないシェルでは
は?内蔵してるが?おそらく初期版から。
getoptsを内蔵してないのはbusyboxで
意図的に外してビルドした場合ぐらいだろ
> $OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
当たり前だな。どこに状態を保存してるのかと
> dashみたいにgetoptsを内蔵していないシェルでは
は?内蔵してるが?おそらく初期版から。
getoptsを内蔵してないのはbusyboxで
意図的に外してビルドした場合ぐらいだろ
267デフォルトの名無しさん
2019/12/23(月) 16:22:45.93ID:CGg4xw4r >>264
何を言ってるのかわからんが、検証が間違ってる
何を言ってるのかわからんが、検証が間違ってる
268デフォルトの名無しさん
2019/12/23(月) 16:36:13.95ID:YJsAIsu8 >>267
あ、そうなの。
じゃあdashの組み込みgetoptsが何らかの
形でBashやKshのそれと$OPTIND変数に対する処理が違うんだな。
ともあれ単純に初期化すればいいだけなんで、
事もないよ。
あ、そうなの。
じゃあdashの組み込みgetoptsが何らかの
形でBashやKshのそれと$OPTIND変数に対する処理が違うんだな。
ともあれ単純に初期化すればいいだけなんで、
事もないよ。
269デフォルトの名無しさん
2019/12/23(月) 16:37:34.35ID:CGg4xw4r だいたい$OPTINDはシェル変数なんだから、
getoptsは外部コマンドとして実装するのは不可能なんだよ
どうやってシェルスクリプトから実行された外部コマンドから
呼び出し元シェルスクリプトの
プロセス内のメモリを書き換えるんだよw
getoptsは外部コマンドとして実装するのは不可能なんだよ
どうやってシェルスクリプトから実行された外部コマンドから
呼び出し元シェルスクリプトの
プロセス内のメモリを書き換えるんだよw
270デフォルトの名無しさん
2019/12/23(月) 16:40:45.68ID:CGg4xw4r >>268
geoptsを何回も呼び出したいなら、OPTINDを1にして初期化しろ仕様で決まってる
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html
> If the application sets OPTIND to the value 1, a new set of parameters can be used:
> either the current positional parameters or new arg values. Any other attempt to
> invoke getopts multiple times in a single shell execution environment with
> parameters (positional parameters or arg operands) that are not the same in all invocations,
> or with an OPTIND value modified to be a value other than 1, produces unspecified results.
geoptsを何回も呼び出したいなら、OPTINDを1にして初期化しろ仕様で決まってる
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html
> If the application sets OPTIND to the value 1, a new set of parameters can be used:
> either the current positional parameters or new arg values. Any other attempt to
> invoke getopts multiple times in a single shell execution environment with
> parameters (positional parameters or arg operands) that are not the same in all invocations,
> or with an OPTIND value modified to be a value other than 1, produces unspecified results.
271デフォルトの名無しさん
2019/12/23(月) 16:43:06.84ID:CGg4xw4r bashやkshはローカル変数にでもなってるんだろ
272デフォルトの名無しさん
2019/12/23(月) 20:47:02.60ID:sS1JWXeN ぷぷぷ、ぷろぐらみんぐ言語論wwwww
273デフォルトの名無しさん
2019/12/23(月) 20:50:03.01ID:YJsAIsu8 >>269
え、そうなん?
じゃあ
https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
↑getoptsはここには載ってるけれども
実質としては組み込みコマンドとして実装するしかないのか。
ありがとう!勉強になったわ。
え、そうなん?
じゃあ
https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
↑getoptsはここには載ってるけれども
実質としては組み込みコマンドとして実装するしかないのか。
ありがとう!勉強になったわ。
274デフォルトの名無しさん
2019/12/23(月) 22:11:39.28ID:gENEPh5i >>273
そこに乗ってるのは確かに気持ち悪さがあるけどね。alias、cd、readあたりも。
まあプロセス間通信などを使えば、外部コマンドとして作るのは
絶対に不可能というわけじゃないがまずやらんだろうなw
そこに乗ってるのは確かに気持ち悪さがあるけどね。alias、cd、readあたりも。
まあプロセス間通信などを使えば、外部コマンドとして作るのは
絶対に不可能というわけじゃないがまずやらんだろうなw
275デフォルトの名無しさん
2019/12/23(月) 22:26:33.99ID:EXKdfS/F 大昔は cd が外部コマンドだったと知って吃驚仰天
276デフォルトの名無しさん
2019/12/24(火) 11:07:35.47ID:mQqeuoCV そんなバナナ
277デフォルトの名無しさん
2019/12/24(火) 11:10:44.79ID:8h2rOUkn https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32549&forum=6
Cシェル(csh)上に、/usr/bin/cdと書くと、チェンジディレクトリがうまくいかず、普通にcd〜〜と書くと正しくチェンジディレクトリされます。
shellのカレントディレクトリを変更したいのなら、組み込みコマンドを使わないとダメです。
# にもかかわらず外部コマンドのcdを持っているUnixがあるのは何故だろう?
# joke ?
Cシェル(csh)上に、/usr/bin/cdと書くと、チェンジディレクトリがうまくいかず、普通にcd〜〜と書くと正しくチェンジディレクトリされます。
shellのカレントディレクトリを変更したいのなら、組み込みコマンドを使わないとダメです。
# にもかかわらず外部コマンドのcdを持っているUnixがあるのは何故だろう?
# joke ?
278デフォルトの名無しさん
2019/12/24(火) 11:11:40.76ID:8h2rOUkn https://tutorialmore.com/questions-292990.htm
この素晴らしい回答で参照されているように、POSIXシステムには外部バイナリ cd があります
シェル組み込みに加えて。 OS X 10.8では /usr/bin/cd です 。組み込みの cd のように
使用することはできません 独自の作業ディレクトリを変更するとすぐに終了するためです。どんな目的に役立つのですか?
解決した方法 # 1
主に、シェルの
この素晴らしい回答で参照されているように、POSIXシステムには外部バイナリ cd があります
シェル組み込みに加えて。 OS X 10.8では /usr/bin/cd です 。組み込みの cd のように
使用することはできません 独自の作業ディレクトリを変更するとすぐに終了するためです。どんな目的に役立つのですか?
解決した方法 # 1
主に、シェルの
279デフォルトの名無しさん
2019/12/24(火) 13:50:24.53ID:lTGNfo7C POSIXシステムには外部バイナリ cd があります
ないけど…?
ないけど…?
280デフォルトの名無しさん
2019/12/24(火) 17:56:12.00ID:O0jTO9nR WSLのUbuntuにもない。
281デフォルトの名無しさん
2019/12/24(火) 18:31:17.89ID:mQqeuoCV というか、あったとしてどうやって使うのか?
282デフォルトの名無しさん
2019/12/24(火) 18:35:06.35ID:mQqeuoCV カレントディレクトリを移動してから何か実行させたいならそのcdコマンドからexecしない限りできんよな?
とするとそのcdコマンドはディレクトリだけでなく実行するコマンドを引数として受け取るのか?
とするとそのcdコマンドはディレクトリだけでなく実行するコマンドを引数として受け取るのか?
283デフォルトの名無しさん
2019/12/24(火) 20:48:55.98ID:uCBqTgFr >>278 が出ているのに。あまり使い道がない例だけどな
284デフォルトの名無しさん
2019/12/24(火) 21:07:13.05ID:uCBqTgFr https://pubs.opengroup.org/onlinepubs/009695399/utilities/cd.html
APPLICATION USAGE
最初にビルトインに決まってるという説明の後で、ほぼ同じこと書いてあるやん
例が実行できるようにするには必要で、これはできないとは書いてないからあるのが仕様内だろう、たぶん
こんな使い方しねーよで無いんじゃないの、Ubuntu(Debian?)などは
APPLICATION USAGE
最初にビルトインに決まってるという説明の後で、ほぼ同じこと書いてあるやん
例が実行できるようにするには必要で、これはできないとは書いてないからあるのが仕様内だろう、たぶん
こんな使い方しねーよで無いんじゃないの、Ubuntu(Debian?)などは
285デフォルトの名無しさん
2019/12/25(水) 17:49:11.61ID:DcKuxkE0 なるほど
286デフォルトの名無しさん
2019/12/25(水) 18:50:00.73ID:N+K1pmuB シェルのバックグラウンドジョブとtrapとシグナルについての理解がしたいです。
手許の環境はBashですが、コマンドライン自体はPOSIXに準じているつもりです。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }&
↑このコマンドラインを実行すると
すぐにプロンプトが帰ってきて
start
# 5秒後
end
↑などと出力されます。
一方で
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
↑このコマンドラインを実行すると
start
# 1秒後
trapped
↑と出力されますが(少なくとも手許では)、
バックグランドジョブに回した直後のsleepを除去すると↓
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
何も出力されなくなります。
最後のコマンドラインでもsleep 1を挿入した時と同じ挙動(start→#1秒後→trappedと表示)に
させるにはどうすればいいでしょうか。
どうかご教示ください。
手許の環境はBashですが、コマンドライン自体はPOSIXに準じているつもりです。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }&
↑このコマンドラインを実行すると
すぐにプロンプトが帰ってきて
start
# 5秒後
end
↑などと出力されます。
一方で
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
↑このコマンドラインを実行すると
start
# 1秒後
trapped
↑と出力されますが(少なくとも手許では)、
バックグランドジョブに回した直後のsleepを除去すると↓
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
何も出力されなくなります。
最後のコマンドラインでもsleep 1を挿入した時と同じ挙動(start→#1秒後→trappedと表示)に
させるにはどうすればいいでしょうか。
どうかご教示ください。
287デフォルトの名無しさん
2019/12/25(水) 19:25:32.89ID:GfHtMQ6w シグナルハンドラはデフォルトの動作があらかじめ決まってる
SIGQUITだとコアダンプ吐いて強制終了かな。SIGUSR1/SIGUSR2もなんかあったな
シグナルハンドラを設定しようとするスクリプト(trap)が実行される前にはそのデフォルトのが動いてしまう
シグナルハンドラを設定するスクリプトが実行されるであろうまでsleepで待つか、設定した準備できたと知らせる(親プロセスにシグナル投げるなり)じゃないかな
onhandling=0; trap -- 'onhandling=1' USR1; { trap -- 'echo trapped; exit' QUIT; kill -USR1 $$; echo start; sleep 5& wait $!; echo end; }& while [ $onhandling -eq 0 ]; do sleep 0.1; done; kill -s QUIT $!
とか
シグナル実行抑止遅延とかあったかなあ
SIGQUITだとコアダンプ吐いて強制終了かな。SIGUSR1/SIGUSR2もなんかあったな
シグナルハンドラを設定しようとするスクリプト(trap)が実行される前にはそのデフォルトのが動いてしまう
シグナルハンドラを設定するスクリプトが実行されるであろうまでsleepで待つか、設定した準備できたと知らせる(親プロセスにシグナル投げるなり)じゃないかな
onhandling=0; trap -- 'onhandling=1' USR1; { trap -- 'echo trapped; exit' QUIT; kill -USR1 $$; echo start; sleep 5& wait $!; echo end; }& while [ $onhandling -eq 0 ]; do sleep 0.1; done; kill -s QUIT $!
とか
シグナル実行抑止遅延とかあったかなあ
288デフォルトの名無しさん
2019/12/25(水) 19:36:59.98ID:N+K1pmuB >>287
ありがとうございます!
無事解決しました。
ところで (すでに問題は解決できたので)単なる興味本位なのですが、
trap -- 'kill -s QUIT $!' USR1; { trap -- 'echo trapped; exit' QUIT; kill -s USR1 $$; echo start; sleep 5& wait $!; echo end;
}&
↑これだと問題ありますか。
素人目線では上手くいくような気がしますが、子プロセスを殺すtrapを親プロセスの前に仕掛けてるあたりが
マズい気がします……。
(ちなみに手許では>>287様が示してくださったものと同様上手くいきました)
ありがとうございます!
無事解決しました。
ところで (すでに問題は解決できたので)単なる興味本位なのですが、
trap -- 'kill -s QUIT $!' USR1; { trap -- 'echo trapped; exit' QUIT; kill -s USR1 $$; echo start; sleep 5& wait $!; echo end;
}&
↑これだと問題ありますか。
素人目線では上手くいくような気がしますが、子プロセスを殺すtrapを親プロセスの前に仕掛けてるあたりが
マズい気がします……。
(ちなみに手許では>>287様が示してくださったものと同様上手くいきました)
289デフォルトの名無しさん
2019/12/25(水) 19:39:42.14ID:N+K1pmuB290デフォルトの名無しさん
2019/12/25(水) 19:59:14.64ID:GfHtMQ6w notif=/tmp/$$.fifo; mkfifo $notif; { trap -- 'echo trapped; exit' QUIT; echo read > $notif; echo start; sleep 5& wait $!; echo end; }& read a < $notif; kill -s QUIT $!; rm $notif
通知はFIFO使って、ループが無くなってちょっとスッキリ版
通知はFIFO使って、ループが無くなってちょっとスッキリ版
291デフォルトの名無しさん
2019/12/25(水) 20:09:25.33ID:v8ePSHs/ >>286
> { trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
> 何も出力されなくなります。
コアダンプって出力されるよな?
> { trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
> 何も出力されなくなります。
コアダンプって出力されるよな?
292デフォルトの名無しさん
2019/12/25(水) 21:22:56.22ID:rkHGbRnb 一行で書くから見づらいったらありゃしないw
そんなごちゃごちゃやらなくても、これでいいやろ?
#!/bin/sh
sleep 1& SLEEP=$!
{
trap -- 'echo trapped; exit' QUIT
kill $SLEEP
echo start
sleep 5& wait $!
echo end
}&
wait $SLEEP
kill -s QUIT $!
一行に戻すでー
sleep 1& SLEEP=$!; { trap -- 'echo trapped; exit' QUIT; kill $SLEEP; echo start; sleep 5& wait $!; echo end; }& wait $SLEEP; kill -s QUIT $!
そんなごちゃごちゃやらなくても、これでいいやろ?
#!/bin/sh
sleep 1& SLEEP=$!
{
trap -- 'echo trapped; exit' QUIT
kill $SLEEP
echo start
sleep 5& wait $!
echo end
}&
wait $SLEEP
kill -s QUIT $!
一行に戻すでー
sleep 1& SLEEP=$!; { trap -- 'echo trapped; exit' QUIT; kill $SLEEP; echo start; sleep 5& wait $!; echo end; }& wait $SLEEP; kill -s QUIT $!
293デフォルトの名無しさん
2019/12/25(水) 22:03:53.28ID:N+K1pmuB294デフォルトの名無しさん
2019/12/25(水) 22:28:14.59ID:iUDS0c82 ulimit -c unlimited
295デフォルトの名無しさん
2019/12/25(水) 22:29:25.06ID:ixBqsT77 このスレにtrapでソフトタイマを作ったのが載ってるよ。
296デフォルトの名無しさん
2019/12/25(水) 22:40:18.77ID:rkHGbRnb >>295
もうやめたれwww
もうやめたれwww
297デフォルトの名無しさん
2019/12/26(木) 00:40:43.87ID:uF/G2OAQ いちゃもんつけながらでないと自己表現できない自分が確認できない、いつものやつ
298デフォルトの名無しさん
2019/12/26(木) 00:57:23.99ID:0kHOyMkL >>297
わかるように結構工夫して書いてるんだぜw
わかるように結構工夫して書いてるんだぜw
299デフォルトの名無しさん
2019/12/26(木) 00:58:24.91ID:uF/G2OAQ 質問主も応えてるのもわかってるけどな
300デフォルトの名無しさん
2019/12/26(木) 00:58:56.93ID:0kHOyMkL301デフォルトの名無しさん
2019/12/26(木) 01:01:09.61ID:uF/G2OAQ 自己満wキモいわ自分で言うか
すげえな。これ以上何を言っても通じないな
すげえな。これ以上何を言っても通じないな
302デフォルトの名無しさん
2019/12/26(木) 01:03:25.32ID:0kHOyMkL そうそう俺を叩いた所で無駄やで。煽り耐性レベルMAXだからな
そんなくだらないことよりレス(シェルスクリプト)の話をしようや
そんなくだらないことよりレス(シェルスクリプト)の話をしようや
303デフォルトの名無しさん
2019/12/26(木) 10:54:33.00ID:zbYMFUyq304デフォルトの名無しさん
2019/12/26(木) 12:41:29.91ID:MI1/ojN2305デフォルトの名無しさん
2019/12/26(木) 12:47:29.21ID:zbYMFUyq306デフォルトの名無しさん
2019/12/26(木) 12:51:43.96ID:zbYMFUyq 仮にwaitする前にsleepが(一瞬で)killされたとしても
wait ${すでにいないPID} を実行してもエラーにならないんだよね
wait ${すでにいないPID} を実行してもエラーにならないんだよね
307デフォルトの名無しさん
2019/12/26(木) 13:26:19.54ID:zbYMFUyq >>287も>>292もQUITだとdashで想定どおりに動かないからTERMに変更したけど
timeで測りやすくスクリプトにして実行した結果はこんな感じ
$ time sh 287.sh
start
trapped
real 0m0.103s
user 0m0.001s
sys 0m0.002s
$ time sh 292.sh
start
trapped
real 0m0.002s
user 0m0.002s
sys 0m0.000s
>>287は多くの場合、最初の [ $onhandling -eq 0 ]; を満たさないのでsleep 0.1をすることになる。
なので↓のsleep 1を取っ払いたい要望に対して、sleep 0.1に変えたのと大差なくなってる。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
timeで測りやすくスクリプトにして実行した結果はこんな感じ
$ time sh 287.sh
start
trapped
real 0m0.103s
user 0m0.001s
sys 0m0.002s
$ time sh 292.sh
start
trapped
real 0m0.002s
user 0m0.002s
sys 0m0.000s
>>287は多くの場合、最初の [ $onhandling -eq 0 ]; を満たさないのでsleep 0.1をすることになる。
なので↓のsleep 1を取っ払いたい要望に対して、sleep 0.1に変えたのと大差なくなってる。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
308デフォルトの名無しさん
2019/12/26(木) 14:16:08.46ID:MI1/ojN2309デフォルトの名無しさん
2019/12/26(木) 15:10:05.95ID:W7puUhWv 自演w連投ぶりからいつもの
310デフォルトの名無しさん
2019/12/26(木) 17:04:03.21ID:uIk/XshQ 自称神様の降臨か
311デフォルトの名無しさん
2019/12/26(木) 17:46:42.36ID:W7puUhWv ずっと居ついているだろ
312デフォルトの名無しさん
2019/12/26(木) 20:40:26.24ID:VT4/hGaE ただいま。ってかお前ら何やってんの?w
また俺じゃない人に絡んでるようだが
また俺じゃない人に絡んでるようだが
313デフォルトの名無しさん
2019/12/26(木) 20:57:57.00ID:GKWkZChC わざとらしすぎてわろた
314デフォルトの名無しさん
2019/12/26(木) 20:59:56.60ID:VT4/hGaE 違うから違うって言ってるんだけどなw
315デフォルトの名無しさん
2019/12/26(木) 21:06:21.96ID:GKWkZChC はいはい
同じ反応速度、普通のスクリプトでわいわいなレスに対していきなりな同じ態度レスで絡む
同一人物でいいだろ。そんな辺なやつはそう居ないと思うけど
同じ反応速度、普通のスクリプトでわいわいなレスに対していきなりな同じ態度レスで絡む
同一人物でいいだろ。そんな辺なやつはそう居ないと思うけど
316デフォルトの名無しさん
2019/12/26(木) 21:08:13.76ID:VT4/hGaE 意訳 俺以外はみんなあいつ
317デフォルトの名無しさん
2019/12/26(木) 21:08:43.19ID:VT4/hGaE 俺の敵はみんなあいつ
の方が良いか
の方が良いか
318デフォルトの名無しさん
2019/12/26(木) 21:12:56.47ID:GKWkZChC 連投wその連投ぶりのレスの内容といい
特徴的な共通点が多すぎ
特徴的な共通点が多すぎ
319デフォルトの名無しさん
2019/12/26(木) 21:35:49.17ID:VT4/hGaE >>307
俺もやってみたけどQUITじゃたしかにdashで動かないね
確かめたつもりだったけど
> sleep 0.1に変えたのと大差なくなってる。
実際のところ、この例だとsleep 0でも問題なかったりする
sleepという外部プロセスを呼び出す時間があれば、その間にtrapできてるから
と思ってkshでやったら動かんかったわw
kshではsleepはシェルビルトインなんだな
俺もやってみたけどQUITじゃたしかにdashで動かないね
確かめたつもりだったけど
> sleep 0.1に変えたのと大差なくなってる。
実際のところ、この例だとsleep 0でも問題なかったりする
sleepという外部プロセスを呼び出す時間があれば、その間にtrapできてるから
と思ってkshでやったら動かんかったわw
kshではsleepはシェルビルトインなんだな
320デフォルトの名無しさん
2019/12/27(金) 09:20:57.82ID:NrzsOb0y 横だけどQUITって使うことってある?
OSとかデバッガ系なら使うことあるだろうけど
アプリでは使わないほうが良いんじゃいかな?
OSとかデバッガ系なら使うことあるだろうけど
アプリでは使わないほうが良いんじゃいかな?
321デフォルトの名無しさん
2019/12/27(金) 13:14:28.69ID:GMT90LLU >>320
それはなにか理由ある?
それはなにか理由ある?
322デフォルトの名無しさん
2019/12/27(金) 21:58:46.84ID:jjhZE+Ou QUITってコアダンプさせるためのものでしょ?
323デフォルトの名無しさん
2019/12/28(土) 12:47:18.40ID:/Zzxwqbk POSIXでは基本的にTERMとほぼ同じだけど
XSI拡張では「なにか他の動作を追加的に行ってもよい」とあるな。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
XSI拡張では「なにか他の動作を追加的に行ってもよい」とあるな。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
324デフォルトの名無しさん
2019/12/28(土) 23:26:23.77ID:lWCFWx/Q QUITをトラップするとコアダンプ機能が使えなくなるというデメリットがあるね
普通はQUITでコアダンプするわけだから、あれ?コアダンプできない?ってなるかもしれない
コアダンプを明示的に生成する方法あるのかな?
あと、もしかしてdash、ksh、yashだとQUITってtrapできない?
trapしても何も動作しない
普通はQUITでコアダンプするわけだから、あれ?コアダンプできない?ってなるかもしれない
コアダンプを明示的に生成する方法あるのかな?
あと、もしかしてdash、ksh、yashだとQUITってtrapできない?
trapしても何も動作しない
325デフォルトの名無しさん
2019/12/29(日) 01:40:48.31ID:FmabBrht dash,kshはQUITでtrapで動いてるけど。yashは試してない
326デフォルトの名無しさん
2019/12/29(日) 01:53:56.90ID:MrCxy9bb #!/bin/sh
trap 'echo trapped; exit' QUIT
echo $$
sleep 60
これを、sh test.sh & ってやって
表示されたプロセスIDに対してkill -q QUIT プロセスIDって
やっても何も表示されないんだけど、どうやって確認した?
trap 'echo trapped; exit' QUIT
echo $$
sleep 60
これを、sh test.sh & ってやって
表示されたプロセスIDに対してkill -q QUIT プロセスIDって
やっても何も表示されないんだけど、どうやって確認した?
327デフォルトの名無しさん
2019/12/29(日) 02:02:29.22ID:FmabBrht sleepというかコマンドが実行が終わるまでtrapで設定したのは動かないよ
328デフォルトの名無しさん
2019/12/29(日) 02:10:00.25ID:FmabBrht なんか言い方が変だな。POSIXでそのような文が書いてあったと思うそのまま書いた
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
329デフォルトの名無しさん
2019/12/29(日) 02:13:23.19ID:MrCxy9bb あれ?なんかおかしいね。
じゃあ>>287がbashだとtrappedって表示されて
shでは何も表示されないのはなぜ?
念の為、整形したやつ
#!/bin/sh
onhandling=0
trap -- 'onhandling=1' USR1
{
trap -- 'echo trapped; exit' QUIT
kill -USR1 $$
echo start
sleep 5& wait $!
echo end
}&
while [ $onhandling -eq 0 ]; do
sleep 0.1
done
kill -s QUIT $!
じゃあ>>287がbashだとtrappedって表示されて
shでは何も表示されないのはなぜ?
念の為、整形したやつ
#!/bin/sh
onhandling=0
trap -- 'onhandling=1' USR1
{
trap -- 'echo trapped; exit' QUIT
kill -USR1 $$
echo start
sleep 5& wait $!
echo end
}&
while [ $onhandling -eq 0 ]; do
sleep 0.1
done
kill -s QUIT $!
330デフォルトの名無しさん
2019/12/29(日) 02:14:47.34ID:MrCxy9bb331デフォルトの名無しさん
2019/12/29(日) 02:17:11.43ID:FmabBrht 無視ではなくて保留だな。受け取っていることは受け取っている
332デフォルトの名無しさん
2019/12/29(日) 02:19:29.79ID:MrCxy9bb 保留だとしたらkill -s QUITした時点で終了するのはおかしいはずだが?
333デフォルトの名無しさん
2019/12/29(日) 02:25:16.44ID:FmabBrht334デフォルトの名無しさん
2019/12/29(日) 02:31:00.58ID:MrCxy9bb335デフォルトの名無しさん
2019/12/29(日) 02:46:04.76ID:FmabBrht336デフォルトの名無しさん
2019/12/29(日) 03:24:42.26ID:QzTL60WW https://community.progress.com/community_groups/openedge_general/f/26/t/34654
Posted by ske on 8 Aug 2017 13:59
らしいよ。6. とか確かに
コマンドラインでの違いとかはわからんけど
Posted by ske on 8 Aug 2017 13:59
らしいよ。6. とか確かに
コマンドラインでの違いとかはわからんけど
337デフォルトの名無しさん
2019/12/31(火) 07:15:28.46ID:xfr0s5Fj PowerShell最強説
338デフォルトの名無しさん
2019/12/31(火) 08:44:50.09ID:qHnQy48w 諸説あります
339デフォルトの名無しさん
2019/12/31(火) 15:40:24.49ID:F82oxaIy ※個人の感想です
340デフォルトの名無しさん
2019/12/31(火) 23:33:05.25ID:vVhGTaaB 僕もPowerShell愛用しています。
これを使い始めてから人生茨色です!
これを使い始めてから人生茨色です!
341デフォルトの名無しさん
2019/12/31(火) 23:43:55.86ID:tLgKzi5A 人生の道が茨で埋め尽くされております!
342デフォルトの名無しさん
2019/12/31(火) 23:48:11.73ID:9cUyZ2YF ※ 来世にご期待下さい!
343デフォルトの名無しさん
2020/01/01(水) 08:19:52.80ID:6zSEt3Eo >>337
使用されることが最強に少ない感
使用されることが最強に少ない感
344デフォルトの名無しさん
2020/01/02(木) 13:42:39.95ID:ZoBKtk8g 例えば/usr/local/binに
#!/bin/bash
xdg-open /usr/local/bin/hoge.html
という中身のhogeってファイル入れてコマンドで同階層のhtmlを開きたい場合、
ブラウザを閉じたら
[Parent fuga,Cecko_IOThread]
WARNING:pipe error: Connection reset by peer(piyo):
Connection reset bu peer:
file /build/firefox-esr-tpvy6K/filefox-esr-68.2.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc. line 358
という表示が出てくるのですがこれを表示させない方法ってありますか?
#!/bin/bash
xdg-open /usr/local/bin/hoge.html
という中身のhogeってファイル入れてコマンドで同階層のhtmlを開きたい場合、
ブラウザを閉じたら
[Parent fuga,Cecko_IOThread]
WARNING:pipe error: Connection reset by peer(piyo):
Connection reset bu peer:
file /build/firefox-esr-tpvy6K/filefox-esr-68.2.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc. line 358
という表示が出てくるのですがこれを表示させない方法ってありますか?
345デフォルトの名無しさん
2020/01/02(木) 13:59:42.22ID:Ifo0PTAe Bugzilla に登録されてるね。
Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc
https://bugzilla.mozilla.org/show_bug.cgi?id=1550919
Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc
https://bugzilla.mozilla.org/show_bug.cgi?id=1550919
346デフォルトの名無しさん
2020/01/02(木) 14:17:59.62ID:ZoBKtk8g >>345
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
347デフォルトの名無しさん
2020/01/02(木) 18:23:50.86ID:8+JZKzet348デフォルトの名無しさん
2020/01/10(金) 15:59:20.38ID:pZwemz/Y GNU sedって一応POSIXに準拠してるけど、色々拡張機能もあるじゃん
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
349デフォルトの名無しさん
2020/01/10(金) 16:05:57.94ID:c8NDboJX GNU sed, GNU awk には --posix オプション、GNU bc には --standard
っていうオプションが用意されている
っていうオプションが用意されている
350デフォルトの名無しさん
2020/01/11(土) 08:05:41.49ID:IVNUyUW+ 知らんかった。ありがとう
351デフォルトの名無しさん
2020/01/11(土) 21:29:54.53ID:9SPVzhvj やっぱzshクソ。pathとかstatusが特殊変数なのやめてくれ。
しかも大文字と小文字区別しねーし
path=hogehogeってやったら、環境変数PATHから検索しなくなる。
command not found!
しかも大文字と小文字区別しねーし
path=hogehogeってやったら、環境変数PATHから検索しなくなる。
command not found!
352デフォルトの名無しさん
2020/01/11(土) 23:34:38.48ID:NBzz9dXo 単にいままでのに慣れて違いを受け入れないってだけだな
353デフォルトの名無しさん
2020/01/11(土) 23:39:31.73ID:NBzz9dXo なんだ、単に zsh = ksh + tcsh ってのを理解してなくて的外れな文句言っているだけじゃん
アホらしい。文字通り
アホらしい。文字通り
354デフォルトの名無しさん
2020/01/12(日) 08:42:02.61ID:QbL/hexX なんでそんなに攻撃的なんだよw
355デフォルトの名無しさん
2020/01/12(日) 09:36:05.07ID:FpBV3Lt5356デフォルトの名無しさん
2020/01/12(日) 09:39:05.21ID:u1ffAIxu あと、環境変数の大文字と小文字は区別されてるのに
PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ
pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ
pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
357デフォルトの名無しさん
2020/01/12(日) 11:22:16.69ID:QbL/hexX まるでwindows…
358デフォルトの名無しさん
2020/01/12(日) 17:34:52.15ID:J9pO5B5T そんなに不満があるなら誰かがフォークしてそれがメジャーになってるだろ
俺が正しいって言ってもお前の頭の中ではだな
俺が正しいって言ってもお前の頭の中ではだな
359デフォルトの名無しさん
2020/01/12(日) 18:17:26.10ID:QbL/hexX せやな。
事実一番メジャーなシェルはBashだしね。
事実一番メジャーなシェルはBashだしね。
360デフォルトの名無しさん
2020/01/12(日) 18:54:12.07ID:J9pO5B5T 読めない自己紹介にしかなってないな
361デフォルトの名無しさん
2020/01/12(日) 19:23:15.19ID:J9pO5B5T >>356
わざわざ後付けで書いてあるのに根本的に何も理解しようとしてないだけだな
大文字小文字を判断してないじゃないよ、
PATHは単なる文字列pathは配列、
pathはcsh特有での、
PATHとpathという別の2つの環境変数
shモードcshモードを切り替えてなんていう実装ではなくちゃんぽんの可能な実装なので、PATH/pathをどちらか変更したら相対する方にも同期するというのだろ。そもそもcshでのpathがそういうものらしいが
内部的に参照しているのはpathの方かな。同期されない特定状態の場合から(どういうときか探してみようw)
今まで使っていたのと違うというだけじゃ話にならない、俺が正しいって言ってもお前の頭の中ではだなでしかないということ(>>355なんてそれが甚だしいけどw)
わざわざ後付けで書いてあるのに根本的に何も理解しようとしてないだけだな
大文字小文字を判断してないじゃないよ、
PATHは単なる文字列pathは配列、
pathはcsh特有での、
PATHとpathという別の2つの環境変数
shモードcshモードを切り替えてなんていう実装ではなくちゃんぽんの可能な実装なので、PATH/pathをどちらか変更したら相対する方にも同期するというのだろ。そもそもcshでのpathがそういうものらしいが
内部的に参照しているのはpathの方かな。同期されない特定状態の場合から(どういうときか探してみようw)
今まで使っていたのと違うというだけじゃ話にならない、俺が正しいって言ってもお前の頭の中ではだなでしかないということ(>>355なんてそれが甚だしいけどw)
362デフォルトの名無しさん
2020/01/12(日) 21:32:38.39ID:UPYAUoGA cshがーっていうけど、zshとcshに互換性はまったくないじゃん
真似しなくていいものを真似した結果、貴重な短い変数名が
使えなくなってしまったことに違いはないんだけど
真似しなくていいものを真似した結果、貴重な短い変数名が
使えなくなってしまったことに違いはないんだけど
363デフォルトの名無しさん
2020/01/12(日) 21:53:04.90ID:J9pO5B5T 作りもしないのに何を文句だけ言っているのだか。そんなに俺が偉いしたいの?
This is a shar file containing zsh, a ksh/tcsh-like shell.
というコンセプトで始めてるんだよ、その成果が認められているのは有名ディストリでもパッケージとしてあるんだから明らかだろう
そんなに俺の考えたのが最強なら作ってみればいいじゃん、フォークしてでも。世界に名を轟かせるいい機会だぞ、こんな匿名で偉そうに評論してんじゃなくw
This is a shar file containing zsh, a ksh/tcsh-like shell.
というコンセプトで始めてるんだよ、その成果が認められているのは有名ディストリでもパッケージとしてあるんだから明らかだろう
そんなに俺の考えたのが最強なら作ってみればいいじゃん、フォークしてでも。世界に名を轟かせるいい機会だぞ、こんな匿名で偉そうに評論してんじゃなくw
364デフォルトの名無しさん
2020/01/12(日) 22:07:46.46ID:7H3TRCXg zshのクソ機能をクソ機能と言っただけで
なにファビョってるんだろう?
お前が作ったわけでもないだろうに
バカにされたとでも思ってるのか?
なにファビョってるんだろう?
お前が作ったわけでもないだろうに
バカにされたとでも思ってるのか?
365デフォルトの名無しさん
2020/01/12(日) 22:14:00.70ID:J9pO5B5T クソ機能をクソ機能と言えるほど全然賢くないのが明らかなのに、自覚のないヤツ(ら?)だなあという。自覚がないようだからでしかないんだがな
いや、そのコメでますますアレでしかないなあ。自分は何かをクソと呼ぶが、自分が同じように呼ばれると聞かないって、じゃあ、そもそもどういうつもりでクソと呼んでいるのか?哲学だよww
結局俺偉いだけもしくはただの根拠のない感情だけだから、俺が自分自身と同じだと思ってそんなコメすんだろな?としか思えんけど
いや、そのコメでますますアレでしかないなあ。自分は何かをクソと呼ぶが、自分が同じように呼ばれると聞かないって、じゃあ、そもそもどういうつもりでクソと呼んでいるのか?哲学だよww
結局俺偉いだけもしくはただの根拠のない感情だけだから、俺が自分自身と同じだと思ってそんなコメすんだろな?としか思えんけど
366デフォルトの名無しさん
2020/01/12(日) 22:26:10.29ID:7H3TRCXg うわっw なんだろう、これ美味しくないって言ったら
お前は料理できるんか?みたいな反応
ただの評論家だろ、評論家は評論するな!
自分で料理しろ、自分で自分で絵をかけ、自分で歌を歌え
プロよりうまくなかったら、評価する資格なし。みたいな極端な考えw
お前は料理できるんか?みたいな反応
ただの評論家だろ、評論家は評論するな!
自分で料理しろ、自分で自分で絵をかけ、自分で歌を歌え
プロよりうまくなかったら、評価する資格なし。みたいな極端な考えw
367デフォルトの名無しさん
2020/01/12(日) 22:29:57.49ID:J9pO5B5T わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん
それに対して、そんなことないぞなぜなら〜と返しているのだが。なにか問題があるか?
料理調理の内容がというなら自分で作れというのはいたって当たり前だろう。不満があったら自分で調理するのがOSSだからな
結局俺偉いってだけで反論を許さない、なぜなら俺偉いからというだけかw
それに対して、そんなことないぞなぜなら〜と返しているのだが。なにか問題があるか?
料理調理の内容がというなら自分で作れというのはいたって当たり前だろう。不満があったら自分で調理するのがOSSだからな
結局俺偉いってだけで反論を許さない、なぜなら俺偉いからというだけかw
368デフォルトの名無しさん
2020/01/12(日) 22:36:44.16ID:7H3TRCXg > わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん
レビュー。Googleもやってるで
レビュー。Googleもやってるで
369デフォルトの名無しさん
2020/01/12(日) 22:39:15.15ID:J9pO5B5T ちょっと意味がわからんが、ああいうとこはやりとりはしないできないだろ
てか、ど素人かよ。スクリプトであってもまがりなりにも何か自分で作っているのに未だど素人かよと思ってしまうな、クレーマーレベルすぎてw
てか、ど素人かよ。スクリプトであってもまがりなりにも何か自分で作っているのに未だど素人かよと思ってしまうな、クレーマーレベルすぎてw
370デフォルトの名無しさん
2020/01/13(月) 05:57:08.53ID:iUioslZh そんなに気に入らないなら自分で新しいシェル作れば良いのに。
371デフォルトの名無しさん
2020/01/13(月) 06:56:27.50ID:00IYKkjv 信者の例
新しいバトルシステムが使いづらい
→ そんなに気に入らないなら自分で新しいゲーム作れば良いのに
「設定」が使いづらい
→ そんなに気に入らないなら自分でOS作れば良いのに
新しいバトルシステムが使いづらい
→ そんなに気に入らないなら自分で新しいゲーム作れば良いのに
「設定」が使いづらい
→ そんなに気に入らないなら自分でOS作れば良いのに
372デフォルトの名無しさん
2020/01/13(月) 12:47:53.36ID:cEXtDkBR ナポレオン「私は卵を産めないが、卵が腐っていると判断できる」
(Zshの利用者が満足するような)シェルを作れる自信はないが、
Zshの一部機能を腐ってるとは言える。
ていうか他の人も指摘してたけど二三の欠点を指摘されただけで
まるで自分の人格を全否定されたかのような反応をするのってどういう感情なんだろう?
(Zshの利用者が満足するような)シェルを作れる自信はないが、
Zshの一部機能を腐ってるとは言える。
ていうか他の人も指摘してたけど二三の欠点を指摘されただけで
まるで自分の人格を全否定されたかのような反応をするのってどういう感情なんだろう?
373デフォルトの名無しさん
2020/01/13(月) 15:10:18.33ID:v+Mp6rDH psコマンドで見て a.out で実行されているプロセスを全部 kill -9 してくれるスクリプトってどう書いたらいいですか
374デフォルトの名無しさん
2020/01/13(月) 15:12:27.51ID:stzsvKPq 教えてあげないよじゃん
375デフォルトの名無しさん
2020/01/13(月) 15:35:35.00ID:v+Mp6rDH 約に立たない2chのクズ共が自分で調べた方が早い
ps | grep "./a.out" | grep -v grep | awk '{ print "kill -9", $1}' | sh
ps | grep "./a.out" | grep -v grep | awk '{ print "kill -9", $1}' | sh
376デフォルトの名無しさん
2020/01/13(月) 15:47:43.19ID:GhUCXbF0 374は屑だが回答ないと豹変するのもどうかと
377デフォルトの名無しさん
2020/01/13(月) 16:00:10.75ID:L1QEfUqR killall でいいんじゃないかな
378デフォルトの名無しさん
2020/01/13(月) 16:03:48.34ID:cEXtDkBR 煽って回答を貰うのはよく見掛ける光景だけど
煽りながら自己解決するのは珍しいなw
煽りながら自己解決するのは珍しいなw
379デフォルトの名無しさん
2020/01/13(月) 16:56:48.83ID:48BANHU6 zshはbashの強化版だと思ってたら違うのね
bashを覚えるので手一杯なんで他のシェルに浮気する余裕ないけど
bashを覚えるので手一杯なんで他のシェルに浮気する余裕ないけど
380デフォルトの名無しさん
2020/01/13(月) 22:41:06.83ID:ybxFvJaC シェルスクリプトとしてはzshは使わないね。
bashとだいたい互換性があるシェル。
スクリプトとしてはPOSIX準拠にするかbashでしょう
bashとだいたい互換性があるシェル。
スクリプトとしてはPOSIX準拠にするかbashでしょう
381デフォルトの名無しさん
2020/01/13(月) 23:52:57.18ID:HaVRjpT+382デフォルトの名無しさん
2020/01/14(火) 00:50:43.36ID:/0srrHag macでosアップデートしたらzsh強制になったんだが
383デフォルトの名無しさん
2020/01/14(火) 03:49:13.20ID:GtH+RxOj アップデートでは強制にならないよ
アップデートでなくても強制でもないし、単なるデフォ
アップデートでなくても強制でもないし、単なるデフォ
384デフォルトの名無しさん
2020/01/14(火) 16:08:03.31ID:5kcRpVJe385デフォルトの名無しさん
2020/01/14(火) 18:06:08.65ID:Xjyusg2Z386デフォルトの名無しさん
2020/01/14(火) 18:09:26.71ID:Xjyusg2Z この図 https://tangentsoft.com/misc/unix-shells.svg を見ると
zshはtcshを取り入れてると言うが、正確にはそれをやったのはKornShellで
その後継のksh88が、POSIX shellやbash等の現存する全てのシェルの祖先に
なるわけだから、zshと同様にdashやbashなんかもtcshを取り入れてることになるんだよな。
zshはtcshを取り入れてると言うが、正確にはそれをやったのはKornShellで
その後継のksh88が、POSIX shellやbash等の現存する全てのシェルの祖先に
なるわけだから、zshと同様にdashやbashなんかもtcshを取り入れてることになるんだよな。
387デフォルトの名無しさん
2020/01/14(火) 18:10:25.17ID:Xjyusg2Z ksh2020でたからこの図更新してくれんかなw
388デフォルトの名無しさん
2020/01/14(火) 18:46:58.03ID:3k/caRNi kshってなんか凄いんだな
昔、AIXでksh書いた事あるけど
AIXぐらいでしかインストールされてる環境に出逢ったことない
Solarisでbsh書いてた後に触って配列使えて感動したのを覚えてる
また使ってみるかなぁ
昔、AIXでksh書いた事あるけど
AIXぐらいでしかインストールされてる環境に出逢ったことない
Solarisでbsh書いてた後に触って配列使えて感動したのを覚えてる
また使ってみるかなぁ
389デフォルトの名無しさん
2020/01/14(火) 23:00:12.31ID:eC6vK415390デフォルトの名無しさん
2020/01/14(火) 23:05:01.84ID:eC6vK415391デフォルトの名無しさん
2020/01/15(水) 00:00:09.35ID:kWU6CwmB UNIXでbshができる
BSDでcshができる
改良版のtcshができる
bshにtcshを追加したkshができる
kshが商用だったので派生が拡がる
軽量版bshのashができる
Lnux版ashのdashができる
GNU版bshのbashができる
機能マシマシのzshができる
独立系のfishができる
こんな感じか
文字の修正とか昔のbashにはなかったらしいな
BSDでcshができる
改良版のtcshができる
bshにtcshを追加したkshができる
kshが商用だったので派生が拡がる
軽量版bshのashができる
Lnux版ashのdashができる
GNU版bshのbashができる
機能マシマシのzshができる
独立系のfishができる
こんな感じか
文字の修正とか昔のbashにはなかったらしいな
392デフォルトの名無しさん
2020/01/15(水) 00:15:20.12ID:iV6SKP+H デジャヴな適当なまとめレス
393デフォルトの名無しさん
2020/01/15(水) 00:24:02.07ID:PiCqpD5C fishは全然関係ねー
互換性がない別物
互換性がない別物
394デフォルトの名無しさん
2020/01/15(水) 07:03:57.56ID:kWU6CwmB 関係ないから独立系にしたんだけど
395デフォルトの名無しさん
2020/01/15(水) 07:44:52.57ID:YlxQUfnE それ依然に単に図を適当に日本語にしただけの説明なんてしなくていいから。
396デフォルトの名無しさん
2020/01/16(木) 07:51:49.13ID:kJFHtYN8 TETって使ってる?
OpenGroupが配布してる適合テスト
OpenGroupが配布してる適合テスト
397デフォルトの名無しさん
2020/01/17(金) 08:13:43.25ID:z4CRALQ3 しらん
398デフォルトの名無しさん
2020/01/19(日) 08:08:23.81ID:q9WTUin1 例えば'100 50'を渡すとして、コマンドと実行結果がそれぞれ
awk '$0' #100 50
awk '$0+=1' #101
awk '$0+=$0' #200
awk '$0+=$2/2' #125
awk '$1+=$2/2' #125 50
みたいになったのですが、内側3つの挙動がよく分かりません。
予想ではそれぞれ'101 51'や'200 100'や'125 75'等になると思っていたのですが、
$0って計算式を書き込むと$1を表示する仕組みなんでしょうか…?
awk '$0' #100 50
awk '$0+=1' #101
awk '$0+=$0' #200
awk '$0+=$2/2' #125
awk '$1+=$2/2' #125 50
みたいになったのですが、内側3つの挙動がよく分かりません。
予想ではそれぞれ'101 51'や'200 100'や'125 75'等になると思っていたのですが、
$0って計算式を書き込むと$1を表示する仕組みなんでしょうか…?
399デフォルトの名無しさん
2020/01/19(日) 09:17:02.04ID:qcodQ+dh $1, $2 などは、フィールド(列)変数。
$0 は、入力レコード(行)全体
こういう特別な変数に、代入してはいけない!
読み込む事だけに使うこと!
$0 は、入力レコード(行)全体
こういう特別な変数に、代入してはいけない!
読み込む事だけに使うこと!
400デフォルトの名無しさん
2020/01/19(日) 11:47:43.00ID:eoYSOV4S それは言いすぎだろう。少なくとも gawk では何が起こるか明確になっている。
理解する気が無いならやらない方がいいというならその通りだ。
理解する気が無いならやらない方がいいというならその通りだ。
401デフォルトの名無しさん
2020/01/19(日) 19:39:38.50ID:JpGnQ0ST シェル芸の定義って、スクリプトファイル作らないで、シェル(CLI)を駆使して
実用的ではないネタを披露すること。でいいですかね?
いやあまりにもくだらないネタが多いんで
実用的ではないネタを披露すること。でいいですかね?
いやあまりにもくだらないネタが多いんで
402デフォルトの名無しさん
2020/01/19(日) 19:41:53.38ID:rMML9kO3 何が言いたいんだか
403デフォルトの名無しさん
2020/01/19(日) 19:52:31.45ID:JpGnQ0ST 難読化シェル芸の解読
ながいPythonコードをシェル芸で実行させる
じわじわ広がる星型模様シェル芸
動く!電光掲示板シェル芸
ボディビルダーが泳ぐシェル芸
アイドルグループが46か48かわからなくなったときにワンライナーで解決する方法
鬼滅の刃の幾何学模様シェル芸
踊るgifシェル芸
ojichatグラフシェル芸
3の倍数と3が付く数字のときだけアホになるシェル芸
床屋シェル芸
闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」
実践 キングウンコの作り方
画像っぽい素数をシェル芸でつくる
fish起動時にサイゼリヤ1000円ガチャの結果を表示する
【危険シェル芸】禁じられた闇の魔術とその防衛術??
ながいPythonコードをシェル芸で実行させる
じわじわ広がる星型模様シェル芸
動く!電光掲示板シェル芸
ボディビルダーが泳ぐシェル芸
アイドルグループが46か48かわからなくなったときにワンライナーで解決する方法
鬼滅の刃の幾何学模様シェル芸
踊るgifシェル芸
ojichatグラフシェル芸
3の倍数と3が付く数字のときだけアホになるシェル芸
床屋シェル芸
闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」
実践 キングウンコの作り方
画像っぽい素数をシェル芸でつくる
fish起動時にサイゼリヤ1000円ガチャの結果を表示する
【危険シェル芸】禁じられた闇の魔術とその防衛術??
404デフォルトの名無しさん
2020/01/19(日) 19:54:37.30ID:ExWppFRM >>400
POSIXでも、
The symbol $0 shall refer to the entire record; setting any other field causes the re-evaluation of $0. Assigning to $0 shall reset the values of all other fields and the NF built-in variable
と明言してるね。$1〜$nを変えれば$0が再構築され、$0を変えれば$1〜$nとNFが作り直される風に
POSIXでも、
The symbol $0 shall refer to the entire record; setting any other field causes the re-evaluation of $0. Assigning to $0 shall reset the values of all other fields and the NF built-in variable
と明言してるね。$1〜$nを変えれば$0が再構築され、$0を変えれば$1〜$nとNFが作り直される風に
405デフォルトの名無しさん
2020/01/19(日) 20:01:00.70ID:ExWppFRM406デフォルトの名無しさん
2020/01/20(月) 04:39:32.79ID:JFurewkA >>351
っPowerShell
っPowerShell
407デフォルトの名無しさん
2020/01/20(月) 15:24:29.08ID:oVJVVsJQ408デフォルトの名無しさん
2020/01/21(火) 12:52:55.03ID:m6IPx8KZ kshって今時だとninjaとか使うんか…
昔ながらのMakefileじゃないんだね
昔ながらのMakefileじゃないんだね
409デフォルトの名無しさん
2020/01/21(火) 21:11:00.03ID:Mn6KsPak 教えていただきたいことがあります。
ワンクリックで複数のターミナルを開いてそれぞれで別々のコマンドを動かすスクリプトを書きたいと思っています。
gnome-teminalにオプションつけたらいけるかと思いますしたが、うまく行かなくて、、なにかアドバイスいただけないでしょうか
ワンクリックで複数のターミナルを開いてそれぞれで別々のコマンドを動かすスクリプトを書きたいと思っています。
gnome-teminalにオプションつけたらいけるかと思いますしたが、うまく行かなくて、、なにかアドバイスいただけないでしょうか
410デフォルトの名無しさん
2020/01/22(水) 07:07:11.43ID:uCiji4On gnome-terminal なら -- の後に実行したいコマンドを書けばいいだけみたいだけど
動いているが挙動がイマイチとかじゃないの?
うまく行かないって、そのままTerminalとしてウィンドウを残しておきたいとか引き続きインタラクティブでなんかしたいとか?
動いているが挙動がイマイチとかじゃないの?
うまく行かないって、そのままTerminalとしてウィンドウを残しておきたいとか引き続きインタラクティブでなんかしたいとか?
411デフォルトの名無しさん
2020/01/22(水) 07:22:53.82ID:uCiji4On GUI Terminalアプリは一般的にコマンドが実行し終えたらアプリも終える=ウィンドウも消えるという、まあそうなるか的な(まあshもそうだし)
gnome-terminalはオプションでウィンドウを残すようにできるが、なんかイマイチかな、出るべきものが出てないとか
gnome-terminal -- sh -c 'なんかコマンド;sh'
が確実に解りやすいかなあ
shで引き続きインタラクティブにするのには、--rcfile スクリプトファイル という変態的な方法で
gnome-terminal -- sh --rcfile スクリプトファイル
とかあったが、変態すぎてしないなw
gnome-terminalはオプションでウィンドウを残すようにできるが、なんかイマイチかな、出るべきものが出てないとか
gnome-terminal -- sh -c 'なんかコマンド;sh'
が確実に解りやすいかなあ
shで引き続きインタラクティブにするのには、--rcfile スクリプトファイル という変態的な方法で
gnome-terminal -- sh --rcfile スクリプトファイル
とかあったが、変態すぎてしないなw
412デフォルトの名無しさん
2020/01/22(水) 20:17:38.02ID:IMIM4EWG 返信ありがとうございます!
具体的にはFIFOを複数作成した後に、
ffplay (作成したfifo) というコマンドを
fifoの数だけ開きたいのですが、数が多くて一つ一つ開くのは大変なので、スクリプトで一気に開けないかと考えているところです。
具体的にはFIFOを複数作成した後に、
ffplay (作成したfifo) というコマンドを
fifoの数だけ開きたいのですが、数が多くて一つ一つ開くのは大変なので、スクリプトで一気に開けないかと考えているところです。
413デフォルトの名無しさん
2020/01/22(水) 20:31:41.36ID:aGAY9ZaD ffplayって自分で独自のウィンドウ開くんじゃないの?
全てバックグラウンドで起動する/動かせばいいんじゃないの?
ffplayが吐くログも同時に見たいとか??
全てバックグラウンドで起動する/動かせばいいんじゃないの?
ffplayが吐くログも同時に見たいとか??
414デフォルトの名無しさん
2020/01/22(水) 20:38:59.30ID:0dPQnm43415デフォルトの名無しさん
2020/01/22(水) 21:18:09.64ID:aGAY9ZaD for i in 1 2 3 4; do
gnome-terminal -- ffplay $i.fifo
done
で、再生中はTerminalウィンドウも健在でログも見えるんじゃないの。ffplayが終了したらTerminalウィンドウは閉じてしまう
gnome-terminal -- sh -c "ffplay $i.fifo;sh"
で、Terminalウィンドウも残ると思うけど。Terminalウィンドウでffplayを終了させようとctrl-cすると、後のsh起動まで行かないけど
gnome-terminal -- ffplay $i.fifo
done
で、再生中はTerminalウィンドウも健在でログも見えるんじゃないの。ffplayが終了したらTerminalウィンドウは閉じてしまう
gnome-terminal -- sh -c "ffplay $i.fifo;sh"
で、Terminalウィンドウも残ると思うけど。Terminalウィンドウでffplayを終了させようとctrl-cすると、後のsh起動まで行かないけど
416デフォルトの名無しさん
2020/01/22(水) 21:37:15.05ID:0dPQnm43417デフォルトの名無しさん
2020/01/25(土) 17:35:52.15ID:2I6NhO3j index=2,INFO1="abc",INFO2="ab,c"
↑こういう風に
「カンマ区切りで値が並んでて、区切り文字ではないカンマは引用符で囲まれてる」
みたいなデータに対して、
シェルスクリプトでINFO2やらindexやらの値を取得したいんだけどどういう方法がいいですかね。
IFSをカンマにする方法では引用符で囲まれてるカンマも区切りと見做されちゃうし…
シェルって""←の中を特別に扱う筈だから、evalとか使えば効率的に処理できそうなんだけど、
思い付かん…
↑こういう風に
「カンマ区切りで値が並んでて、区切り文字ではないカンマは引用符で囲まれてる」
みたいなデータに対して、
シェルスクリプトでINFO2やらindexやらの値を取得したいんだけどどういう方法がいいですかね。
IFSをカンマにする方法では引用符で囲まれてるカンマも区切りと見做されちゃうし…
シェルって""←の中を特別に扱う筈だから、evalとか使えば効率的に処理できそうなんだけど、
思い付かん…
418デフォルトの名無しさん
2020/01/25(土) 19:29:47.91ID:nGGHbHoP なんか前も似たような話があった気がするな
でもカンマ区切りでダブルクォートの中にカンマが含まれてるのかー
ってかCSV形式だなw
CSV関連のコマンドと連携させれば簡単に作れるけど
俺は使いたくないなー。というすると自分でパースするしか無いかなー
自分が必要なら最悪パースするけど、簡単な方法ないかなーw
でもカンマ区切りでダブルクォートの中にカンマが含まれてるのかー
ってかCSV形式だなw
CSV関連のコマンドと連携させれば簡単に作れるけど
俺は使いたくないなー。というすると自分でパースするしか無いかなー
自分が必要なら最悪パースするけど、簡単な方法ないかなーw
419デフォルトの名無しさん
2020/01/25(土) 19:31:22.74ID:nGGHbHoP あ、IFSをカンマにしてから、evalに渡せばできるんじゃね?
420デフォルトの名無しさん
2020/01/25(土) 19:32:25.51ID:nGGHbHoP あ、evalじゃだめか。setがいるか
421デフォルトの名無しさん
2020/01/25(土) 19:44:38.62ID:nGGHbHoP setはいらんかったw
あとはスペースが入ってるときかー、どうやって対処するかな?
あとはスペースが入ってるときかー、どうやって対処するかな?
422デフォルトの名無しさん
2020/01/25(土) 20:29:47.31ID:2I6NhO3j423デフォルトの名無しさん
2020/01/25(土) 20:29:55.33ID:S3XsKqnt プログラミング言語でやったことあるけど
もともとあるデータに手を加えられないなら
カンマを違う区切り文字に置き換えたかな
行解析ロジック入れたりもした
最近作ったシェルスクリプトだと
読み込むファイルをちゃんと設計して
そんなデータは行末に来るようにした
そしてwhile readで処理できるようにしてる
もともとあるデータに手を加えられないなら
カンマを違う区切り文字に置き換えたかな
行解析ロジック入れたりもした
最近作ったシェルスクリプトだと
読み込むファイルをちゃんと設計して
そんなデータは行末に来るようにした
そしてwhile readで処理できるようにしてる
424デフォルトの名無しさん
2020/01/25(土) 20:48:15.05ID:2I6NhO3j 超具体的に言うと(てかここまで直接に状況を晒すとクレクレみたくなるなw)
“playlist.m3u8”っていうファイルだとして
↑こういう形式の行が沢山あるんだけど、
ここのRESOLUTIONの値と対応するMOVIE-URIの値をずらずら欲しい。
IFSを変える方法だとやっぱり引用符に関係なく「,」で区切られちゃうのよね
while read l; do
IFS=','; for s in "$l"; do
echo "$s"
done
done < ./playlist.m3u8
“playlist.m3u8”っていうファイルだとして
↑こういう形式の行が沢山あるんだけど、
ここのRESOLUTIONの値と対応するMOVIE-URIの値をずらずら欲しい。
IFSを変える方法だとやっぱり引用符に関係なく「,」で区切られちゃうのよね
while read l; do
IFS=','; for s in "$l"; do
echo "$s"
done
done < ./playlist.m3u8
425デフォルトの名無しさん
2020/01/25(土) 20:49:51.89ID:2I6NhO3j426デフォルトの名無しさん
2020/01/25(土) 21:15:13.22ID:nGGHbHoP 面倒になったー
index=2,INFO1="abc",INFO2="ab,c"
を
index=2 INFO1="abc" INFO2="ab c"
に変換すれば
evalできるよ!
あとは頑張ってー
index=2,INFO1="abc",INFO2="ab,c"
を
index=2 INFO1="abc" INFO2="ab c"
に変換すれば
evalできるよ!
あとは頑張ってー
427デフォルトの名無しさん
2020/01/25(土) 22:38:09.23ID:2I6NhO3j428デフォルトの名無しさん
2020/01/25(土) 22:39:10.68ID:nGGHbHoP >>427
戻せばいいよー
戻せばいいよー
429デフォルトの名無しさん
2020/01/25(土) 22:40:41.08ID:nGGHbHoP んー?戻すとなったらset使ったほうがいいんか?
eval set -- index=2 INFO1="abc" INFO2="ab c"
$1, $2,・・・代入されるからに処理しやすい
eval set -- index=2 INFO1="abc" INFO2="ab c"
$1, $2,・・・代入されるからに処理しやすい
430デフォルトの名無しさん
2020/01/25(土) 22:41:54.41ID:nGGHbHoP > AWKやらでガシガシ解析するしかないw
シェルスクリプトでも普通にやればいいんだけどねー
一文字ずつ処理する方法さえ調べれば、
あとは簡単な普通のパーサー
シェルスクリプトでも普通にやればいいんだけどねー
一文字ずつ処理する方法さえ調べれば、
あとは簡単な普通のパーサー
431デフォルトの名無しさん
2020/01/25(土) 22:43:30.45ID:nGGHbHoP こういうのってawkで高度(?)な機能と発想の転換で使ってこなすより
1文字ずつ処理したほうが楽でわかりやすいよな
1文字ずつ処理したほうが楽でわかりやすいよな
432デフォルトの名無しさん
2020/01/26(日) 01:20:08.20ID:GaEtLwpN GNU awk なら FPAT が使える
echo 'index=2,INFO1="abc",INFO2="ab,c"' |
gawk -vFPAT='[^=,"]+=("[^"]*"|[^,]*)' '{print gensub(FPAT, "\\1", "g")}'
=> 2,"abc","ab,c"
echo 'index=2,INFO1="abc",INFO2="ab,c"' |
gawk -vFPAT='[^=,"]+=("[^"]*"|[^,]*)' '{print gensub(FPAT, "\\1", "g")}'
=> 2,"abc","ab,c"
433デフォルトの名無しさん
2020/01/26(日) 01:26:07.97ID:gf7z5zyj >>432
そういうやつね、高度な機能っていうのは
大体動くんだろうけど、仕組みを把握するのがだるいんだよね
仕組みっていうかどこまで動いて、どこが動かないのかの把握
大体動く精神なんだろうけど、それ使う側がそれで
納得できる前提だから、知らない人が使う場合困るんだよな
いざ問題が起きたら、対応が逆に大変になる
そういうやつね、高度な機能っていうのは
大体動くんだろうけど、仕組みを把握するのがだるいんだよね
仕組みっていうかどこまで動いて、どこが動かないのかの把握
大体動く精神なんだろうけど、それ使う側がそれで
納得できる前提だから、知らない人が使う場合困るんだよな
いざ問題が起きたら、対応が逆に大変になる
434デフォルトの名無しさん
2020/01/26(日) 01:31:16.29ID:GaEtLwpN いやぁ、こっちからみると eval や set を使う方がツラいわ…
435デフォルトの名無しさん
2020/01/26(日) 01:38:47.61ID:3NTRDHS2 evalやsetは普通にシェルが文法を解釈するのと
同じ動きをするだけなんだからシンプルだろ
シェルの構文パーサー自体はしっかりと作られてるんだから
でもFPATはだいたい動くという理念で作られてる
同じ動きをするだけなんだからシンプルだろ
シェルの構文パーサー自体はしっかりと作られてるんだから
でもFPATはだいたい動くという理念で作られてる
436デフォルトの名無しさん
2020/01/26(日) 01:48:36.68ID:GaEtLwpN FPATって単なる正規表現(ERE)でしかないけどな。個人的には正規表現で
考える方が楽でいいし確実。以前に同じ様な事があったけど、
・変数名にもカンマを使いたい(SQLみたいにバッククォートで括る)
・値の方には複数行のテキストを入れたい(newlineを使える様にして)
っていうリクエストがあって大変だったけど、結局 python の CSV パッケージ
を使って解決
考える方が楽でいいし確実。以前に同じ様な事があったけど、
・変数名にもカンマを使いたい(SQLみたいにバッククォートで括る)
・値の方には複数行のテキストを入れたい(newlineを使える様にして)
っていうリクエストがあって大変だったけど、結局 python の CSV パッケージ
を使って解決
437デフォルトの名無しさん
2020/01/26(日) 02:14:38.87ID:3NTRDHS2 そもそも正規表現は単語(文字の並び)を見分けるもので
その単語の意味(このカンマはどういう意味?)を
見分けるものじゃないんだよ
本来得意ではない意味を区別できるよう拡張していったら
逆にコード見ても何をしているか意味がわからなくなってる
コードをパット見てその意味がわからんのは
スパゲッティコードと大差ないよ
その単語の意味(このカンマはどういう意味?)を
見分けるものじゃないんだよ
本来得意ではない意味を区別できるよう拡張していったら
逆にコード見ても何をしているか意味がわからなくなってる
コードをパット見てその意味がわからんのは
スパゲッティコードと大差ないよ
438デフォルトの名無しさん
2020/01/26(日) 02:21:54.35ID:GaEtLwpN eval 使うのは面白いけど、
$ eval $(echo 'id=$(whoami),hostname=$(hostname),date="$(date)"' | tr , ' ')
fork_bomb=$(:(){ :|:& };:) なんて文字列を埋め込まれたら嫌だな…
$ eval $(echo 'id=$(whoami),hostname=$(hostname),date="$(date)"' | tr , ' ')
fork_bomb=$(:(){ :|:& };:) なんて文字列を埋め込まれたら嫌だな…
439デフォルトの名無しさん
2020/01/26(日) 03:03:54.87ID:GaEtLwpN m3u8-file-parser(http://npm.taobao.org/package/m3u8-file-parser)なんてのがあるな
playlist のフォーマットって RFC8216 で定義されていたのね
playlist のフォーマットって RFC8216 で定義されていたのね
440デフォルトの名無しさん
2020/01/26(日) 09:15:52.32ID:EvZHCPY7 https://tools.ietf.org/html/rfc8216#section-4.2
属性列挙を解析したいって話か。
属性列挙を解析したいって話か。
441デフォルトの名無しさん
2020/01/26(日) 11:48:02.12ID:EvZHCPY7442デフォルトの名無しさん
2020/01/26(日) 13:26:43.97ID:XFNlR92Q てかお前らいつまで化石みたいな話してんの?
PowerShellやれよ
お前らが大好きなLinuxにもPowerShell入れられるように成ってるからw
もうこれからはハイパーVとかWindowsサーバーとかWSLできないと食ってなるぞお前らまじで
PowerShellやれよ
お前らが大好きなLinuxにもPowerShell入れられるように成ってるからw
もうこれからはハイパーVとかWindowsサーバーとかWSLできないと食ってなるぞお前らまじで
443デフォルトの名無しさん
2020/01/26(日) 13:39:38.23ID:IghF1+Kj Perl ならこんな感じか。
perl -ne 'while ( /(("[^"]*"|[^,])+)/g ){ print("$1\n") }'
Perl にも CSV を扱うモジュールはあるけどね。
perl -ne 'while ( /(("[^"]*"|[^,])+)/g ){ print("$1\n") }'
Perl にも CSV を扱うモジュールはあるけどね。
444デフォルトの名無しさん
2020/01/26(日) 13:42:52.65ID:EvZHCPY7 ちょっとやろうとしてみたけど
_var='a b "a,b" c "a b"'
IFS=' '
eval set -- $_var
for s in "$@"; do
echo "$s"
done
↑これが↓
a
b
a,b
c
a b
になるのに、
_var='a,b,"a,b",c,"a b"'
IFS=','
eval set -- $_var
for s in "$@"; do
echo "$s"
done
↑これが↓
a
b
a b
c
a b
↑こうなってしまうのでevalとsetでどうにかするのはかなり難しそう。
(コンマの情報が潰されちゃう)
シェルスクリプトで自作するのに拘ってるみたいだけど
m3u8パーサ?使うべきじゃないかなぁ。
_var='a b "a,b" c "a b"'
IFS=' '
eval set -- $_var
for s in "$@"; do
echo "$s"
done
↑これが↓
a
b
a,b
c
a b
になるのに、
_var='a,b,"a,b",c,"a b"'
IFS=','
eval set -- $_var
for s in "$@"; do
echo "$s"
done
↑これが↓
a
b
a b
c
a b
↑こうなってしまうのでevalとsetでどうにかするのはかなり難しそう。
(コンマの情報が潰されちゃう)
シェルスクリプトで自作するのに拘ってるみたいだけど
m3u8パーサ?使うべきじゃないかなぁ。
445デフォルトの名無しさん
2020/01/26(日) 14:11:49.86ID:GaEtLwpN446デフォルトの名無しさん
2020/01/26(日) 16:19:39.04ID:5vRllc8t なんかハマってるなw
例えば最初がこれだとするだろ?
index=2,INFO1="a bc",INFO2="ab,c"
ダブルクォートの中にスペースが入ることがあるとして、まずスペースをありえない文字(制御文字)に変換するだろ?
index=2,INFO1="a<DEL>bc",INFO2="ab,c"
次にカンマをスペースにするだろ?
index=2 INFO1="a<DEL>bc" INFO2="ab c"
これをeval + setするだろ?
eval "set -- $DATA"
そうすると、こうなるやんか?
$1: index=2
$2: INFO1="a<DEL>bc"
$3: INFO2="ab c"
あとはループして、<DEL>をスペースに戻しつつevalすればOKだよ
文字の置換はIFS使って分割して結合
俺が悩んでたのは、実はありえない文字に変換しないで
できないかなーってところなんだよねw
>>438
そういうのは仕様。それを防ぎたかったらevalは使えないのでパースするしか無い
もしくはエスケープ+evalだけどエスケープするために結局パースが必要になる
例えば最初がこれだとするだろ?
index=2,INFO1="a bc",INFO2="ab,c"
ダブルクォートの中にスペースが入ることがあるとして、まずスペースをありえない文字(制御文字)に変換するだろ?
index=2,INFO1="a<DEL>bc",INFO2="ab,c"
次にカンマをスペースにするだろ?
index=2 INFO1="a<DEL>bc" INFO2="ab c"
これをeval + setするだろ?
eval "set -- $DATA"
そうすると、こうなるやんか?
$1: index=2
$2: INFO1="a<DEL>bc"
$3: INFO2="ab c"
あとはループして、<DEL>をスペースに戻しつつevalすればOKだよ
文字の置換はIFS使って分割して結合
俺が悩んでたのは、実はありえない文字に変換しないで
できないかなーってところなんだよねw
>>438
そういうのは仕様。それを防ぎたかったらevalは使えないのでパースするしか無い
もしくはエスケープ+evalだけどエスケープするために結局パースが必要になる
447デフォルトの名無しさん
2020/01/26(日) 16:34:10.53ID:GaEtLwpN http://npm.taobao.org/package/m3u8-file-parser に載ってる m3u8 のサンプル
を見るとこういう行もある
#EXTINF:23.222 tvg-logo="haha, ddd" tvg-aa="sb@" tag=sa, Sample artist, : - Sample title
を見るとこういう行もある
#EXTINF:23.222 tvg-logo="haha, ddd" tvg-aa="sb@" tag=sa, Sample artist, : - Sample title
448デフォルトの名無しさん
2020/01/26(日) 17:19:14.35ID:EvZHCPY7 <https://tools.ietf.org/html/rfc8216#section-4.2>によるといずれの形式の属性値も読点を含んではならないとあるのに,
例えば<https://tools.ietf.org/html/rfc8216#section-4.3.4.2>のCODEC属性値の説明には「引用符で囲まれた読点区切りの…」とある。
もしもAttributeValueの形式に全部のタグが従っていたら,上での細かい話は要らずに
IFS=','やらawk -v FS=','やらいくらでも方法はあったのにね。
ざっと見たところ,属性値であるにもかかわらず読点を含むという仕様になってるのは例にも挙げた
#EXT-X-STREAM-INF:タグのCODEC属性値のみっぽいので,もういっそそれだけを区別して処理するのもありかも。
例えば<https://tools.ietf.org/html/rfc8216#section-4.3.4.2>のCODEC属性値の説明には「引用符で囲まれた読点区切りの…」とある。
もしもAttributeValueの形式に全部のタグが従っていたら,上での細かい話は要らずに
IFS=','やらawk -v FS=','やらいくらでも方法はあったのにね。
ざっと見たところ,属性値であるにもかかわらず読点を含むという仕様になってるのは例にも挙げた
#EXT-X-STREAM-INF:タグのCODEC属性値のみっぽいので,もういっそそれだけを区別して処理するのもありかも。
449デフォルトの名無しさん
2020/01/26(日) 17:24:07.99ID:EvZHCPY7 中身のない連投すまんが,
処理する相手がRFC 8216に準拠したファイルだという前提があるとするなら
タグごとに挙動を変えるほうが賢いかもしれない。
というのもどのタグにどういう文字列が現れうるかということが規格に明記されているので。
>>446 ありえない文字に置換する手法もいいとは思うけど,そういう制御文字ってたいてい
<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap06.html#tagtcjh_4>に記述されている
非可搬な文字だから,ちゃんと運用する予定のスクリプトに入れるのは不安……。
処理する相手がRFC 8216に準拠したファイルだという前提があるとするなら
タグごとに挙動を変えるほうが賢いかもしれない。
というのもどのタグにどういう文字列が現れうるかということが規格に明記されているので。
>>446 ありえない文字に置換する手法もいいとは思うけど,そういう制御文字ってたいてい
<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap06.html#tagtcjh_4>に記述されている
非可搬な文字だから,ちゃんと運用する予定のスクリプトに入れるのは不安……。
450デフォルトの名無しさん
2020/01/26(日) 17:29:07.81ID:EvZHCPY7 しっかし音楽・映像関連の処理をシェルスクリプトでやろうとしているとは,
そうとう変わってるなw
普通そんなファイルが存在して,かつそれらを自分で処理する=その後何らかの形で利用する
ような環境にいるんだったら,もっと色々やりやすい道具(PythonやらJavaScriptやら)もある筈よね。
シェルスクリプトで処理するしかないのは,貧弱な環境と単純なデータ構造に対してでしょうに。
(まあ>>1で「他の言語でやれ」は禁止とあるから,シェルによる処理を考えているけど)
そうとう変わってるなw
普通そんなファイルが存在して,かつそれらを自分で処理する=その後何らかの形で利用する
ような環境にいるんだったら,もっと色々やりやすい道具(PythonやらJavaScriptやら)もある筈よね。
シェルスクリプトで処理するしかないのは,貧弱な環境と単純なデータ構造に対してでしょうに。
(まあ>>1で「他の言語でやれ」は禁止とあるから,シェルによる処理を考えているけど)
451デフォルトの名無しさん
2020/01/26(日) 17:42:41.77ID:GaEtLwpN 世の中には「ナントカ原理主義」を標榜する一派がいるのでな…
いや、この話題はやめておこう
いや、この話題はやめておこう
452デフォルトの名無しさん
2020/01/26(日) 17:54:10.76ID:5vRllc8t >>449
非可搬な文字ってどういう意味?
ただの文字コードに過ぎないし、化けるわけでもなし
どんな問題があるのか全くわからんのだけど、
それにそこのテーブルに書いてある文字がダメだというのなら、
ESCAPE文字もダメってことになるじゃんか
16進数で0x1B、8進数で033、 文字に色をつけるときの\033
echo -e "\033[0;31mテキスト\033[0;39m"
理論上でもいいからどんな問題があるのかを言ってくれないと
非可搬な文字ってどういう意味?
ただの文字コードに過ぎないし、化けるわけでもなし
どんな問題があるのか全くわからんのだけど、
それにそこのテーブルに書いてある文字がダメだというのなら、
ESCAPE文字もダメってことになるじゃんか
16進数で0x1B、8進数で033、 文字に色をつけるときの\033
echo -e "\033[0;31mテキスト\033[0;39m"
理論上でもいいからどんな問題があるのかを言ってくれないと
453デフォルトの名無しさん
2020/01/26(日) 17:55:19.59ID:5vRllc8t 非可搬な文字を心配するぐらいだったらAWKのGNU拡張に対応してるかを心配するほうがより現実的w
454デフォルトの名無しさん
2020/01/26(日) 18:45:22.92ID:EvZHCPY7 >>452
おっしゃる通り理論上の話で実際はほぼありえない(制御文字の使い方もほぼ統一されてるから)けど,
<DEL>文字が端末それ自体を制御する為のものだった場合,それが標準出力に出力された時に
端末自体に挙動が渡ってしまう。
> 文字に色をつけるときの...
事実色をエスケープ文字によって付ける方法はシェルの標準には載ってない。
おっしゃる通り理論上の話で実際はほぼありえない(制御文字の使い方もほぼ統一されてるから)けど,
<DEL>文字が端末それ自体を制御する為のものだった場合,それが標準出力に出力された時に
端末自体に挙動が渡ってしまう。
> 文字に色をつけるときの...
事実色をエスケープ文字によって付ける方法はシェルの標準には載ってない。
455デフォルトの名無しさん
2020/01/26(日) 19:38:00.94ID:5vRllc8t >>454
別に<DEL>じゃなくてもいいよw
略称思いつかなかっただけだし、表示されて困る文字だからこそ
テキストの中に含まれてることはないだろという理由だし
> 事実色をエスケープ文字によって付ける方法はシェルの標準には載ってない。
シェルの標準の載ってるかどうかの話じゃなくて「非可搬な文字」だから「使えない」という
理屈でいくのなら、エスケープ文字も使えないねって話
俺は「非可搬な文字」だけど「使っていけないとは書かれてない」と言ってる
だいたい非可搬っていうのは、その文字の意味が定められていないぐらいの意味やろ
バイナリで見ればただのデータなんだから
バイナリで見ればこのバイトは非可搬な文字と一致するから
データの中に使ってはいけないんだ〜みたいな話したいわけじゃないやろ?
別に<DEL>じゃなくてもいいよw
略称思いつかなかっただけだし、表示されて困る文字だからこそ
テキストの中に含まれてることはないだろという理由だし
> 事実色をエスケープ文字によって付ける方法はシェルの標準には載ってない。
シェルの標準の載ってるかどうかの話じゃなくて「非可搬な文字」だから「使えない」という
理屈でいくのなら、エスケープ文字も使えないねって話
俺は「非可搬な文字」だけど「使っていけないとは書かれてない」と言ってる
だいたい非可搬っていうのは、その文字の意味が定められていないぐらいの意味やろ
バイナリで見ればただのデータなんだから
バイナリで見ればこのバイトは非可搬な文字と一致するから
データの中に使ってはいけないんだ〜みたいな話したいわけじゃないやろ?
456デフォルトの名無しさん
2020/01/26(日) 21:27:37.26ID:EvZHCPY7 >>455
いや,別に<DEL>に限った話じゃない。
今回みたく
「シェルに扱ってほしくない文字を置換して一時的に退避」
→「シェルで処理」→「元に戻す」
↑こういう手法を使うにあったって必要な,
「普通の文字列には現れそうにない文字」
っていうのは大抵不可視の制御文字でしょう?(<DEL>だろうが<US>だろうが<FS>だろうが)
で,そいつら制御文字が標準出力に流れた時の挙動は未定義だから避けたほうがいいんじゃない?
という話。
繰り返すけど,これは理論上の話で,実際はほぼ起こり得ない。
けれども,
printf '\033[>c' | cat
↑こういうスクリプトが実行されたとすると,こいつはある種のOS/端末で端末情報を返すので
パイプも働かないし,おかしなことになる。
しつこいけど,こんなことが意図せず起きるなんて万に一つ。
普通は<US>やら<FS>やらを一時退避用の制御文字として利用するし,こいつらはOS/端末に対してなんら特殊な働き掛けをしないのが通例だからね。
ただ,しないとも限らないし,そうでないことが規定されておらず「非可搬」だと明記されていることも踏まえると,使わないほうがいいかなと。
いや,別に<DEL>に限った話じゃない。
今回みたく
「シェルに扱ってほしくない文字を置換して一時的に退避」
→「シェルで処理」→「元に戻す」
↑こういう手法を使うにあったって必要な,
「普通の文字列には現れそうにない文字」
っていうのは大抵不可視の制御文字でしょう?(<DEL>だろうが<US>だろうが<FS>だろうが)
で,そいつら制御文字が標準出力に流れた時の挙動は未定義だから避けたほうがいいんじゃない?
という話。
繰り返すけど,これは理論上の話で,実際はほぼ起こり得ない。
けれども,
printf '\033[>c' | cat
↑こういうスクリプトが実行されたとすると,こいつはある種のOS/端末で端末情報を返すので
パイプも働かないし,おかしなことになる。
しつこいけど,こんなことが意図せず起きるなんて万に一つ。
普通は<US>やら<FS>やらを一時退避用の制御文字として利用するし,こいつらはOS/端末に対してなんら特殊な働き掛けをしないのが通例だからね。
ただ,しないとも限らないし,そうでないことが規定されておらず「非可搬」だと明記されていることも踏まえると,使わないほうがいいかなと。
457デフォルトの名無しさん
2020/01/26(日) 23:20:03.89ID:5MGoPlaT >>456
> で,そいつら制御文字が標準出力に流れた時の挙動は未定義だから避けたほうがいいんじゃない?
いやだから、そういう理屈でいくと、
「色をつけるエスケープ文字も避けたほうがいいんじゃない?」って
言ってるってことでいいんだねって聞いてるんだが
> で,そいつら制御文字が標準出力に流れた時の挙動は未定義だから避けたほうがいいんじゃない?
いやだから、そういう理屈でいくと、
「色をつけるエスケープ文字も避けたほうがいいんじゃない?」って
言ってるってことでいいんだねって聞いてるんだが
458デフォルトの名無しさん
2020/01/26(日) 23:27:21.62ID:2jcz6vHU Ruby にも、CSV モジュールがある
デフォルト設定では、
行区切り文字は、改行
列区切り文字は、カンマ
クォート文字は、"
この3つの特殊文字が、要素内にない時は、クォートしなくてよい
逆に、ある時は、クォート文字で囲む。
その際、" だけは、"" と2つにする!
デフォルト設定では、
行区切り文字は、改行
列区切り文字は、カンマ
クォート文字は、"
この3つの特殊文字が、要素内にない時は、クォートしなくてよい
逆に、ある時は、クォート文字で囲む。
その際、" だけは、"" と2つにする!
459デフォルトの名無しさん
2020/01/27(月) 00:03:23.40ID:2UZekz3a >>458
話の流れが分からない馬鹿は引っ込んでろ
話の流れが分からない馬鹿は引っ込んでろ
460デフォルトの名無しさん
2020/01/27(月) 00:15:59.79ID:Ad8VU0Ek csvパーサー使えで終わる話を
延々とやってる暇人のほうがどう考えても馬鹿だと思うぞ
延々とやってる暇人のほうがどう考えても馬鹿だと思うぞ
461デフォルトの名無しさん
2020/01/27(月) 02:47:42.22ID:ZRdDiNHX 必要なのはCSVパーサーじゃないんでしょ?
462デフォルトの名無しさん
2020/01/27(月) 08:20:17.15ID:bYuDSUjl463デフォルトの名無しさん
2020/01/27(月) 12:19:59.05ID:3a7Xl2Zg じゃあ可搬な規格がない文字を出力する
POSIX標準のtputはアウトだねw
可搬な規格がない = 使ったらダメって考えなんでしょ
なんで可搬な規格がないから使ったらダメになるのかさっぱりだw
POSIX標準のtputはアウトだねw
可搬な規格がない = 使ったらダメって考えなんでしょ
なんで可搬な規格がないから使ったらダメになるのかさっぱりだw
464デフォルトの名無しさん
2020/01/27(月) 12:49:44.28ID:YY6i47O6465デフォルトの名無しさん
2020/01/27(月) 13:00:46.30ID:3a7Xl2Zg >>464
非可搬な文字だから,ちゃんと運用する予定のスクリプトに入れるのは不安
なんでしょ?その不安を解決するには禁止するしか無いじゃん
だいたい最初に聞いたはずだが、一体何がポータブルじゃないのかって。
ポータブルじゃないのはその文字を端末に表示した時の端末の挙動であって、
その文字を使ったときにシェルが誤動作するとかいう話ではまったくない
そもそも今回は画面に表示しないから全く関係ない。
スクリプトはどんな環境でも正しく動くのに避ける理由がない。
画面に表示した時の端末の挙動の話であることをあんたは理解してない
文字自体はポータブル(そもそもただの値でしか無い)
シェルスクリプトで使えないデータは 0x00 のみ(zshなど一部シェルでは使えるようだが)
非可搬な文字だから,ちゃんと運用する予定のスクリプトに入れるのは不安
なんでしょ?その不安を解決するには禁止するしか無いじゃん
だいたい最初に聞いたはずだが、一体何がポータブルじゃないのかって。
ポータブルじゃないのはその文字を端末に表示した時の端末の挙動であって、
その文字を使ったときにシェルが誤動作するとかいう話ではまったくない
そもそも今回は画面に表示しないから全く関係ない。
スクリプトはどんな環境でも正しく動くのに避ける理由がない。
画面に表示した時の端末の挙動の話であることをあんたは理解してない
文字自体はポータブル(そもそもただの値でしか無い)
シェルスクリプトで使えないデータは 0x00 のみ(zshなど一部シェルでは使えるようだが)
466デフォルトの名無しさん
2020/01/27(月) 13:02:14.15ID:3a7Xl2Zg × 画面に表示した時の端末の挙動の話であることをあんたは理解してない
? 理解したふりして本質的な所が分かってない。理解が浅いから
話がつながってることが分かってない。それぞれ単独に知ってるだけ。
? 理解したふりして本質的な所が分かってない。理解が浅いから
話がつながってることが分かってない。それぞれ単独に知ってるだけ。
467デフォルトの名無しさん
2020/01/27(月) 13:02:45.79ID:3a7Xl2Zg 文字化けした。ハテナではなくマル
468デフォルトの名無しさん
2020/01/27(月) 13:02:53.97ID:bYuDSUjl469デフォルトの名無しさん
2020/01/27(月) 13:04:22.94ID:3a7Xl2Zg 知らんがなw IDなんか見てないw
470デフォルトの名無しさん
2020/01/27(月) 13:09:39.68ID:J/l4gb9z そこはちゃんと見ろよ。相変わらずオッチョコチョイな奴だw
471デフォルトの名無しさん
2020/01/28(火) 10:45:44.35ID:kbn44J5i シェルスクリプトでC言語みたく
do {...;} while ()
的な書き方できないかな。
つまり最初に条件無視して絶対一回実行されるっていう。
do {...;} while ()
的な書き方できないかな。
つまり最初に条件無視して絶対一回実行されるっていう。
472デフォルトの名無しさん
2020/01/28(火) 11:54:17.23ID:nzUBCcWX while true; do
do_something
condition && break
done
do_something
condition && break
done
473デフォルトの名無しさん
2020/01/28(火) 13:32:33.77ID:wxWXUE5J while
do_something
condition
do :; done
do_something
condition
do :; done
474デフォルトの名無しさん
2020/01/28(火) 16:31:01.77ID:kbn44J5i >>473
すげ。thx
すげ。thx
475デフォルトの名無しさん
2020/01/28(火) 18:42:04.80ID:eRWskeVd do {...;} while () はいらない子
476474
2020/01/28(火) 20:54:08.43ID:kbn44J5i477デフォルトの名無しさん
2020/01/28(火) 21:18:03.61ID:G+y/1z2g 縁の下の力持ちだよ。
/usr/include で grep してみなさい。
/usr/include で grep してみなさい。
478デフォルトの名無しさん
2020/01/29(水) 13:54:11.80ID:B4xAwP+d wc -mがUTF-8とかの文字列でも正しく判定できててビビった。
GNU系はともかく組み込み向けの実装では
絶対無理だと思ってBusyboxとかで試したんだけど、
全部正しい文字数を数えれてた……。
寧ろ喜ぶべきなんだけど、なんか釈然としない(foldとかがポンコツなのに)
GNU系はともかく組み込み向けの実装では
絶対無理だと思ってBusyboxとかで試したんだけど、
全部正しい文字数を数えれてた……。
寧ろ喜ぶべきなんだけど、なんか釈然としない(foldとかがポンコツなのに)
479デフォルトの名無しさん
2020/01/29(水) 14:12:22.86ID:sm4oITBd 逆にbusyboxは動くやろw
不安なのはBSDやで、
あれ、それなりにOKだったらそこで終わってるやん
POSIXの最低基準さえ満たせればいいって思ってる。
busyboxはPOSIX完全準拠を目指さない代わりに
「現実的な用途で動くこと」を目指してる。
UTF-8対応も現実的な要件の一つだよ
不安なのはBSDやで、
あれ、それなりにOKだったらそこで終わってるやん
POSIXの最低基準さえ満たせればいいって思ってる。
busyboxはPOSIX完全準拠を目指さない代わりに
「現実的な用途で動くこと」を目指してる。
UTF-8対応も現実的な要件の一つだよ
480デフォルトの名無しさん
2020/01/29(水) 15:20:33.04ID:0dvwui3i fold -w n に関しては LC_CTYPE=ja_JP.UTF-8 grep -Eo '.{1,n}' とかにするとか
481デフォルトの名無しさん
2020/01/29(水) 16:06:00.43ID:9GJ5+8eT Windows版busyboxも日本語処理なんとかしてくれないかなぁ。
cp932の処理がいまいちなのか、コマンド・プロンプトで使うlsでダメ文字のファイルが表示されないよ。
cp932の処理がいまいちなのか、コマンド・プロンプトで使うlsでダメ文字のファイルが表示されないよ。
482デフォルトの名無しさん
2020/01/29(水) 16:13:50.96ID:sm4oITBd483デフォルトの名無しさん
2020/01/29(水) 16:26:53.62ID:Q03p/42V >>481
っ PowerShell
っ PowerShell
484デフォルトの名無しさん
2020/01/29(水) 20:21:31.86ID:B4xAwP+d >>480
grep優秀っすね…
grep優秀っすね…
485デフォルトの名無しさん
2020/01/29(水) 20:22:55.72ID:UE7eyrg0 grepは俺が育てた
486デフォルトの名無しさん
2020/01/29(水) 21:24:51.02ID:+kOHCQkf487デフォルトの名無しさん
2020/01/30(木) 22:29:51.66ID:uJZNpkau なんで対処方法お母さんに聞かなかったの?
自分で対応できると思ったの
自分で対応できると思ったの
488デフォルトの名無しさん
2020/01/31(金) 07:54:20.77ID:aEgzRTpo シェルスクリプトでaliasを使うことでしか実現できない挙動ってある?
コマンドを別に定義する方法って主に3通りくらいある
関数: somecmd() { ... }
別名: alias somecmd=...
変数 : somecmd=...
と思うんだけど、この内aliasに独特の特長ってあるのかな。
コマンドを別に定義する方法って主に3通りくらいある
関数: somecmd() { ... }
別名: alias somecmd=...
変数 : somecmd=...
と思うんだけど、この内aliasに独特の特長ってあるのかな。
489デフォルトの名無しさん
2020/01/31(金) 09:38:38.09ID:fxx+hpXO >>478
UTF-8は上位ビットを見れば文字の先頭か途中かまた何バイトなのか等がわかるので変換しなくても文字数はわかる(詳しくはWikipedia等を参照)。
そんな小技使って作られているかどうかはわからないが。
UTF-8は上位ビットを見れば文字の先頭か途中かまた何バイトなのか等がわかるので変換しなくても文字数はわかる(詳しくはWikipedia等を参照)。
そんな小技使って作られているかどうかはわからないが。
490デフォルトの名無しさん
2020/01/31(金) 10:37:58.90ID:XoEdclD3491デフォルトの名無しさん
2020/01/31(金) 10:41:13.70ID:XoEdclD3 alias IF=if
alias THEN=then
alias ENDIF=fi
IF [ a = a ]; THEN
echo aaa
ENDIF
alias THEN=then
alias ENDIF=fi
IF [ a = a ]; THEN
echo aaa
ENDIF
492デフォルトの名無しさん
2020/01/31(金) 11:40:54.85ID:aEgzRTpo >>490
一応変数使ってもいけね?
loop='while true; do'
eval "$loop echo aaa; sleep 0.1; done"
てかeval使えばなんでもありだから,
evalを使わずにって条件だと,挙げてくれた例みたいなことが
実現できるのかな。
一応変数使ってもいけね?
loop='while true; do'
eval "$loop echo aaa; sleep 0.1; done"
てかeval使えばなんでもありだから,
evalを使わずにって条件だと,挙げてくれた例みたいなことが
実現できるのかな。
493デフォルトの名無しさん
2020/01/31(金) 11:42:09.27ID:XoEdclD3 × 一応変数使ってもいけね?
○ eval使ってもいけね?
だろ
○ eval使ってもいけね?
だろ
494デフォルトの名無しさん
2020/01/31(金) 11:42:25.98ID:XoEdclD3 そして、evalを使わないと実現できない
495デフォルトの名無しさん
2020/01/31(金) 14:09:19.88ID:y3M2GGQ2496デフォルトの名無しさん
2020/01/31(金) 15:35:28.23ID:aEgzRTpo >>495
関数でもいけんじゃん
関数でもいけんじゃん
497デフォルトの名無しさん
2020/01/31(金) 19:02:07.40ID:drX8qvaW >>496
趣旨を理解してないなら黙ってて
趣旨を理解してないなら黙ってて
498デフォルトの名無しさん
2020/01/31(金) 19:33:30.56ID:dOfy+zuH shebangにさ、#!/bin/sh -eu って書いたらちゃんと動くのに、
#!/bin/sh -e -u って書いたら動かない
オプションは一つしか受け付けない?
これってどこに仕様ありますか?
#!/bin/sh -e -u って書いたら動かない
オプションは一つしか受け付けない?
これってどこに仕様ありますか?
499デフォルトの名無しさん
2020/01/31(金) 19:37:01.40ID:dOfy+zuH 一つしか受け付けないと言うか
#!/bin/sh -e -u
って書いたら
/bin/sh "-e -u"
って解釈されるのか
全体が一つの引数
#!/bin/sh -e -u
って書いたら
/bin/sh "-e -u"
って解釈されるのか
全体が一つの引数
500デフォルトの名無しさん
2020/01/31(金) 20:39:38.35ID:NEnVm4zd 実はshebangの決まった仕様はないからOS依存
501デフォルトの名無しさん
2020/01/31(金) 21:40:42.29ID:O7+QvGXX502デフォルトの名無しさん
2020/01/31(金) 21:53:14.63ID:ppIZAX+V503デフォルトの名無しさん
2020/01/31(金) 22:07:06.55ID:EhZkCGRB この前会見したマスごみが感染元で
504デフォルトの名無しさん
2020/01/31(金) 22:09:28.96ID:MHZeJgmL505デフォルトの名無しさん
2020/01/31(金) 22:17:23.02ID:NEnVm4zd >>501
a) 1つ目のスペースの前がコマンド名、その後はスペースも含めて1つの引数 (Linux等)
b) 1つ目のスペースの前がコマンド名、その後はスペース区切りの複数の引数 (昔のBSDやOSX等)
c) スペースも含めて全部コマンド名 (実在するか不明)
d) shebang非対応 (昔はあったがほぼ絶滅)
あとは、最大長とかにも注意
a) 1つ目のスペースの前がコマンド名、その後はスペースも含めて1つの引数 (Linux等)
b) 1つ目のスペースの前がコマンド名、その後はスペース区切りの複数の引数 (昔のBSDやOSX等)
c) スペースも含めて全部コマンド名 (実在するか不明)
d) shebang非対応 (昔はあったがほぼ絶滅)
あとは、最大長とかにも注意
506デフォルトの名無しさん
2020/01/31(金) 22:38:43.88ID:O7+QvGXX macは違うのかよ。相変わらず独自文化だな。
507デフォルトの名無しさん
2020/01/31(金) 23:54:24.78ID:9zbnwalP >>505
#!の次は本来スペースだって知ってた?
#!の次は本来スペースだって知ってた?
508デフォルトの名無しさん
2020/02/01(土) 00:09:21.13ID:4wtj5811509デフォルトの名無しさん
2020/02/01(土) 01:59:55.43ID:Kd/XXZch510デフォルトの名無しさん
2020/02/01(土) 02:50:01.41ID:SC0qANHR511デフォルトの名無しさん
2020/02/01(土) 18:54:16.89ID:izL/3CDz >>510
オライリーのシェルスクリプトの本には
一部のBSD系OSで#! の後にスペースが要るみたいなこと書いてあった。
でも、これは又聞きで全部試した訳じゃないけど
そんな挙動のBSD実装はなくて、
実はGNUプロジェクトのソースコードに誰かが勘違いして書き込んだコメントが元らしい。
オライリーのシェルスクリプトの本には
一部のBSD系OSで#! の後にスペースが要るみたいなこと書いてあった。
でも、これは又聞きで全部試した訳じゃないけど
そんな挙動のBSD実装はなくて、
実はGNUプロジェクトのソースコードに誰かが勘違いして書き込んだコメントが元らしい。
512デフォルトの名無しさん
2020/02/01(土) 19:00:18.82ID:S6J9WFvX513デフォルトの名無しさん
2020/02/01(土) 19:16:51.31ID:rbhAio8f >>512
ソースチラ見した限りでは元々は a) ぽい。# の後ろはコメントとして切り捨ててるみたいだが
FreeBSDをガシガシ取り入れた時にFreeBSDが b) だからに変えたぽいかな。その後FreeBSDが a) に変わったが追従せずな
ソースチラ見した限りでは元々は a) ぽい。# の後ろはコメントとして切り捨ててるみたいだが
FreeBSDをガシガシ取り入れた時にFreeBSDが b) だからに変えたぽいかな。その後FreeBSDが a) に変わったが追従せずな
514デフォルトの名無しさん
2020/02/01(土) 19:25:08.01ID:rbhAio8f515デフォルトの名無しさん
2020/02/01(土) 19:29:08.08ID:7bhnkH1k macOSでshebangにダブルクォートが入っていた場合どうなるんだろうなぁ
すぐそこにマシンあるから調べればわかるけどさw
すぐそこにマシンあるから調べればわかるけどさw
516デフォルトの名無しさん
2020/02/01(土) 19:56:33.67ID:rbhAio8f 一番古い10.0から公開されてる最新の10.4までで、そこでダブルクォート文字は現れない、'\n'、'#'、' '、'\t' ぐらいしか文字としてナニかを判断してない
単なる文字だね。そのまま引数としての単なる文字として
単なる文字だね。そのまま引数としての単なる文字として
517デフォルトの名無しさん
2020/02/01(土) 20:38:02.21ID:7bhnkH1k 日本語が不自由だぞw
518デフォルトの名無しさん
2020/02/01(土) 20:50:05.02ID:izL/3CDz shebangは悪い文化
519デフォルトの名無しさん
2020/02/01(土) 20:54:33.24ID:7bhnkH1k shebangよりも拡張子の方が良かったのかな?
520デフォルトの名無しさん
2020/02/01(土) 20:57:55.39ID:rbhAio8f なんか説明しようとしたんだがな
ダブルクォートが入っていても関係ないよ。なぜかは調べてね
ダブルクォートが入っていても関係ないよ。なぜかは調べてね
521デフォルトの名無しさん
2020/02/01(土) 20:59:45.01ID:rbhAio8f522デフォルトの名無しさん
2020/02/01(土) 21:13:13.94ID:izL/3CDz >>521
単なる表現だから気にしないでほしいけど
悪い←実装ごとに挙動がバラバラ・標準仕様が規定を諦めている
文化←にもかかわらずほとんどの実装がこれを取り入れていて、利用者もしょうがなく使っている
という状況を言ったつもりだった。
単なる表現だから気にしないでほしいけど
悪い←実装ごとに挙動がバラバラ・標準仕様が規定を諦めている
文化←にもかかわらずほとんどの実装がこれを取り入れていて、利用者もしょうがなく使っている
という状況を言ったつもりだった。
523デフォルトの名無しさん
2020/02/01(土) 21:19:14.91ID:rbhAio8f >>522
なるほど
まあ、誰も(大多数が)困ってないんじゃなのかな、統一されてなくても
もしくはそれぞれがそれぞれが良いと思って譲らないとかかwそれは確かに悪い文化だな
誰も困ってないって方だと思うけど
なるほど
まあ、誰も(大多数が)困ってないんじゃなのかな、統一されてなくても
もしくはそれぞれがそれぞれが良いと思って譲らないとかかwそれは確かに悪い文化だな
誰も困ってないって方だと思うけど
524デフォルトの名無しさん
2020/02/01(土) 21:48:34.75ID:7bhnkH1k shebangが悪い所の一つは絶対パス指定ってところなんだよね
content-typeみたいなのだったら良かったのに
shebangのオプションに関しては使わないっていうのが正解なんだと思う
なぜならファイルを直接指定して実行すると変わっちゃうから
content-typeみたいなのだったら良かったのに
shebangのオプションに関しては使わないっていうのが正解なんだと思う
なぜならファイルを直接指定して実行すると変わっちゃうから
525デフォルトの名無しさん
2020/02/02(日) 14:26:51.03ID:xQhhTPSe てかshebang使わなくてもシェルから起動したらそのまま動かない?
と思って、念の為Bashから起動したらまさかのaliasが効かなかった……。
こういうのを避ける為に#!/bin/shとせざる得ないのか。残念。
と思って、念の為Bashから起動したらまさかのaliasが効かなかった……。
こういうのを避ける為に#!/bin/shとせざる得ないのか。残念。
526デフォルトの名無しさん
2020/02/02(日) 16:53:40.51ID:XLs1Cb+c527デフォルトの名無しさん
2020/02/02(日) 17:45:00.84ID:Cva1xhgA528デフォルトの名無しさん
2020/02/03(月) 06:12:52.05ID:UlsnX0ii みんな
#!/bin/env python
じゃないの?
環境変数使ってくれるよ
#!/bin/env python
じゃないの?
環境変数使ってくれるよ
529デフォルトの名無しさん
2020/02/03(月) 08:04:03.85ID:24GdBe+7 envがあるところは/usr/bin/envな
あとそれ使うと
#!/usr/bin/env bash -e
とかできなくなるからな
Linuxで
あとそれ使うと
#!/usr/bin/env bash -e
とかできなくなるからな
Linuxで
530デフォルトの名無しさん
2020/02/03(月) 09:05:47.42ID:gnFHl5C0 >>529
/bin/envの環境と/usr/bin/envの環境がある
/bin/envの環境と/usr/bin/envの環境がある
531デフォルトの名無しさん
2020/02/03(月) 10:00:30.45ID:24GdBe+7 >>530
envってコマンドを使うと、環境の違いを吸収してくれるから便利だぞ
envってコマンドを使うと、環境の違いを吸収してくれるから便利だぞ
532デフォルトの名無しさん
2020/02/03(月) 11:22:27.68ID:8ufJ91gq >envがあるところは/usr/bin/env
に対しての
/bin/envにある環境もあるって話だろ。「それってなに?」だろ言うなら
に対しての
/bin/envにある環境もあるって話だろ。「それってなに?」だろ言うなら
533デフォルトの名無しさん
2020/02/03(月) 11:28:54.24ID:sGoeeXwW >>531
そのenvコマンドとやらのパスが環境ごとに違うんだよなぁ…。
そのenvコマンドとやらのパスが環境ごとに違うんだよなぁ…。
534デフォルトの名無しさん
2020/02/03(月) 11:40:34.98ID:8ufJ91gq KCディフェンス覚醒したか?するか?
535デフォルトの名無しさん
2020/02/03(月) 11:41:11.41ID:8ufJ91gq やったな、KCディフェンスっ
536デフォルトの名無しさん
2020/02/03(月) 11:41:39.96ID:YoBHNt10 Mac の香具師は、env をよく使う
537デフォルトの名無しさん
2020/02/03(月) 11:41:40.96ID:8ufJ91gq すまん、誤爆もいいとこ。ちょっと興奮してたw
538デフォルトの名無しさん
2020/02/03(月) 11:57:54.57ID:MUEM5Vrv env env env ...
539デフォルトの名無しさん
2020/02/03(月) 12:09:00.93ID:sGoeeXwW なんかこの前々スレあたりで標準出力と標準エラー出力に別々の処理を施した上で
どちらも標準出力に流す方法を見た覚えがあるんだけど
今それっぽい語句で検索しても引っ掛からない。
覚えてる人いない?
どちらも標準出力に流す方法を見た覚えがあるんだけど
今それっぽい語句で検索しても引っ掛からない。
覚えてる人いない?
540デフォルトの名無しさん
2020/02/03(月) 12:58:07.85ID:24GdBe+7541417
2020/02/04(火) 21:40:22.30ID:M0ahQJ78 >>446
ありがとうございます。
コードを参考にさせていただいて、
sed -e 's/\("[^"]*"\)*,\("[^"]*"\)*/\1 \2/g'
という手法にしました。
今のところ
<<. cat |
aa,"dd,dd","aa,bb",cc,"ab c"
.
sed -e 's/\("[^"]*"\)*,\("[^"]*"\)*/\1 \2/g'
がうまいこといくので満足してます。
どうもお手数おかけしました。
ありがとうございます。
コードを参考にさせていただいて、
sed -e 's/\("[^"]*"\)*,\("[^"]*"\)*/\1 \2/g'
という手法にしました。
今のところ
<<. cat |
aa,"dd,dd","aa,bb",cc,"ab c"
.
sed -e 's/\("[^"]*"\)*,\("[^"]*"\)*/\1 \2/g'
がうまいこといくので満足してます。
どうもお手数おかけしました。
542デフォルトの名無しさん
2020/02/04(火) 22:00:02.89ID:zwthX76y case $value in
ここ)
esac
ここって何ていうの?globじゃないよね?
ここ)
esac
ここって何ていうの?globじゃないよね?
543デフォルトの名無しさん
2020/02/04(火) 22:01:37.15ID:/eeo/zhy bash(1) だと pattern って書いてある
544デフォルトの名無しさん
2020/02/04(火) 22:11:53.72ID:zwthX76y パターンかぁ。汎用的すぎるなぁ。
545デフォルトの名無しさん
2020/02/05(水) 07:03:40.14ID:TkSDhbEE (unofficial) Bash Strict Modeって知ってる?
http://redsymbol.net/articles/unofficial-bash-strict-mode/
これが何って話があるわけじゃないんだけど有名なのかな?と思って
外国だとそれなりに情報出てくるけど日本はあまり見つからない
名前が知られてないだけでsetで-eu -o pipefailしましょうというのは聞くけどね
ただIFS=$'\n\t'は知らなかったな。これやったほうがいいんかな?
スペースが削られてるから問題起きそうだけど
http://redsymbol.net/articles/unofficial-bash-strict-mode/
これが何って話があるわけじゃないんだけど有名なのかな?と思って
外国だとそれなりに情報出てくるけど日本はあまり見つからない
名前が知られてないだけでsetで-eu -o pipefailしましょうというのは聞くけどね
ただIFS=$'\n\t'は知らなかったな。これやったほうがいいんかな?
スペースが削られてるから問題起きそうだけど
546デフォルトの名無しさん
2020/02/05(水) 08:00:23.89ID:ER23be8Q547デフォルトの名無しさん
2020/02/05(水) 08:25:41.70ID:TkSDhbEE >>546
それは変数使ってるわけじゃないから問題なく動くよ
それは変数使ってるわけじゃないから問題なく動くよ
548デフォルトの名無しさん
2020/02/07(金) 21:49:29.34ID:fFz2F73L https://github.com/bashup/mdsh
↑おもしろい。シェルも使える文芸的プログラミング
↑おもしろい。シェルも使える文芸的プログラミング
549デフォルトの名無しさん
2020/02/07(金) 22:25:08.40ID:LLO+pCZY めんどくさいので3行にまとめてくれ
550デフォルトの名無しさん
2020/02/07(金) 22:46:56.58ID:LLO+pCZY なるほど。文芸的プログラミングという
ドキュメントを書くときにコードを埋め込んで
(動作確認のために?)実行できるようにするための
マークアップ言語みたいなものがあるんだな
コードの中にコメントを埋め込むのとは逆の発想か
ドキュメントを書くときにコードを埋め込んで
(動作確認のために?)実行できるようにするための
マークアップ言語みたいなものがあるんだな
コードの中にコメントを埋め込むのとは逆の発想か
551デフォルトの名無しさん
2020/02/07(金) 22:58:24.38ID:YkBBCjCg bashのsourceって英語としては意味なんだろう?
includeとかimportだったら読み込むってわかるけど、
なんでsourceって単語にしたんだろうか
includeとかimportだったら読み込むってわかるけど、
なんでsourceって単語にしたんだろうか
552デフォルトの名無しさん
2020/02/08(土) 00:06:22.51ID:Ld8bPHII なんのことかと思ったらMarkdown文書をソースとするshellがありますぞというだけかという感じ
553デフォルトの名無しさん
2020/02/08(土) 08:03:47.73ID:EnngxFza なんでそんなに偉そうなんだよw
554デフォルトの名無しさん
2020/02/08(土) 12:05:42.11ID:vyHTTWz1555デフォルトの名無しさん
2020/02/08(土) 14:06:09.11ID:EnngxFza 今から考えるとimportコマンドとかの方がいいね。
556デフォルトの名無しさん
2020/02/08(土) 14:51:42.04ID:0wE1WgKD importは他のファイル等で定義済みの関数やクラスを今の名前空間に持ってくるイメージ
sourceは他のファイルに書いてるコードを実行するイメージ
言語によってはやってること同じだったりするけど主たる目的が違う気がする
sourceは他のファイルに書いてるコードを実行するイメージ
言語によってはやってること同じだったりするけど主たる目的が違う気がする
557デフォルトの名無しさん
2020/02/08(土) 15:15:58.57ID:rR7NyU2B だな
558デフォルトの名無しさん
2020/02/08(土) 15:41:05.52ID:WgESEu8I > sourceは他のファイルに書いてるコードを実行するイメージ
動作としてはそうなんだけど、
気になってるのは英単語としてどうかなんだよね
変なことを気にしてると思うけど
そもそもsourceって動詞?ああ、動詞としての意味もあるのか?
https://talking-english.net/source/
> sourceは動詞でも使い方があり「仕入れる」といった意味になりますが、
>
> 例文
> We source our coffee beans from Venezuela.
> 私たちはコーヒー豆をベネズエラから仕入れている。
動作としてはそうなんだけど、
気になってるのは英単語としてどうかなんだよね
変なことを気にしてると思うけど
そもそもsourceって動詞?ああ、動詞としての意味もあるのか?
https://talking-english.net/source/
> sourceは動詞でも使い方があり「仕入れる」といった意味になりますが、
>
> 例文
> We source our coffee beans from Venezuela.
> 私たちはコーヒー豆をベネズエラから仕入れている。
559デフォルトの名無しさん
2020/02/08(土) 22:01:26.95ID:EnngxFza importに名前空間を移動する印象があるのは同意だけど
sourceの「他のファイルに書いてるコードを実行する」ような印象はないな。
つーかsourceってシェル以外でみかけない。
名前空間とか高級な概念を無視する、単なる対象ファイルの実行・読み込みは
includeが一番「それっぽい」な。
C言語みたいなコンパイル方式でもm4・Xresourceみたいなインタプリタ・設定ファイル形式でも。
sourceの「他のファイルに書いてるコードを実行する」ような印象はないな。
つーかsourceってシェル以外でみかけない。
名前空間とか高級な概念を無視する、単なる対象ファイルの実行・読み込みは
includeが一番「それっぽい」な。
C言語みたいなコンパイル方式でもm4・Xresourceみたいなインタプリタ・設定ファイル形式でも。
560デフォルトの名無しさん
2020/02/08(土) 23:17:01.30ID:WgESEu8I sourceの本来の名前が . だとして、
/etc/profileとかに . /etc/bash.bashrc とか書いてあるでしょ?
これは関数定義等を読み込んでると言うより、
ただそこにあるスクリプトを実行してるという感じがしない?
/etc/profileとかに . /etc/bash.bashrc とか書いてあるでしょ?
これは関数定義等を読み込んでると言うより、
ただそこにあるスクリプトを実行してるという感じがしない?
561デフォルトの名無しさん
2020/02/08(土) 23:17:36.95ID:WgESEu8I そもそもなんで . (ドット)だったのかっていう疑問もあるけどw
562デフォルトの名無しさん
2020/02/09(日) 07:56:47.77ID:u8D56ofC >>560
ああ、いや、たしかにそうなんだけど、
sourceっていう名前の(または.(ドット)って名前の)コマンドや指令が
シェルスクリプト以外で見掛けないなと思ってさ。
じゃあシェルスクリプト以外の言語でsourceに最も近いはたらきをするのは
なにかって言えば、includeかなぁ。と。
ああ、いや、たしかにそうなんだけど、
sourceっていう名前の(または.(ドット)って名前の)コマンドや指令が
シェルスクリプト以外で見掛けないなと思ってさ。
じゃあシェルスクリプト以外の言語でsourceに最も近いはたらきをするのは
なにかって言えば、includeかなぁ。と。
563デフォルトの名無しさん
2020/02/09(日) 08:09:38.60ID:WtBEbY+3 includeで言えばC言語かなぁ
でもC言語のincludeはヘッダファイルの読み込みで
(今のC++はそうとは言えないが)
実行するものはなにもないものだったよね
.やsourceを他の言語で見たことがないのは同意
なんでこの単語を選んだのか。まあ当時はそういうことをするときの
標準的な単語はなく、includeやimportの方がたまたま有名になったってだけな気もするけど
includeってC/C++以外あったっけ?
でもC言語のincludeはヘッダファイルの読み込みで
(今のC++はそうとは言えないが)
実行するものはなにもないものだったよね
.やsourceを他の言語で見たことがないのは同意
なんでこの単語を選んだのか。まあ当時はそういうことをするときの
標準的な単語はなく、includeやimportの方がたまたま有名になったってだけな気もするけど
includeってC/C++以外あったっけ?
564デフォルトの名無しさん
2020/02/09(日) 08:12:52.16ID:WtBEbY+3 include, import, load, require, source
他に何があるかな?
他に何があるかな?
565デフォルトの名無しさん
2020/02/09(日) 08:15:45.81ID:WtBEbY+3 とういうか、その話をするためにきたんじゃなかったw
makeってどういう亜種があるの?
それぞれのOSでどこまで互換性があるの?
どこかにそういう情報まとまってないかな
makeってどういう亜種があるの?
それぞれのOSでどこまで互換性があるの?
どこかにそういう情報まとまってないかな
566デフォルトの名無しさん
2020/02/09(日) 08:19:42.30ID:WtBEbY+3 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html
ここにPOSIXに関しては書いてあるけど、現実としてはどこまで互換性があるのかなと
つまり便利ないろんな機能(?が使いたいけど、ここには書いて無いようで
使っていいものなのかわからない
ここにPOSIXに関しては書いてあるけど、現実としてはどこまで互換性があるのかなと
つまり便利ないろんな機能(?が使いたいけど、ここには書いて無いようで
使っていいものなのかわからない
567デフォルトの名無しさん
2020/02/09(日) 08:26:03.00ID:WtBEbY+3 オライリーのGNU Make、無料で公開されてたヽ(=´▽`=)ノ
https://www.yokoweb.net/2016/08/28/gnu-make-3rd-pdf-github/
https://www.yokoweb.net/2016/08/28/gnu-make-3rd-pdf-github/
568デフォルトの名無しさん
2020/02/09(日) 08:40:31.63ID:WtBEbY+3 Makeについて調べていたら上のシバンの話、!の後にスペース入れれっていうのが見つかったでw
https://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
> また,以 下のように,インタプリタ仕様として,感嘆符の後にスペースを含めてください.
>
> #! /usr/bin/perl
https://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
> また,以 下のように,インタプリタ仕様として,感嘆符の後にスペースを含めてください.
>
> #! /usr/bin/perl
569デフォルトの名無しさん
2020/02/09(日) 08:41:08.32ID:WtBEbY+3 ここまでコピペするべきだった
> パスの前のスペースを省略する場合,(DYNIXのような)4.2BSDを基本 とするシステムは,
> `#! /'は4バイトのマジックナンバーとして解釈される ので,その行を無視します.
> 古いシステムでは,`#!'行の長さにも小さな 制限があり,例えばSunOS 4では,(改行を含めず)32バイトになります.
> パスの前のスペースを省略する場合,(DYNIXのような)4.2BSDを基本 とするシステムは,
> `#! /'は4バイトのマジックナンバーとして解釈される ので,その行を無視します.
> 古いシステムでは,`#!'行の長さにも小さな 制限があり,例えばSunOS 4では,(改行を含めず)32バイトになります.
570デフォルトの名無しさん
2020/02/09(日) 09:07:13.64ID:nPaz0f5T >>563
VBScript
VBScript
571デフォルトの名無しさん
2020/02/09(日) 10:20:28.40ID:gml78nRc >>569
それ間違っている
https://www.in-ulm.de/~mascheck/various/shebang/#blankrequired
>You may also read, that (allegedly) such a kernel parses "#! /" as a 32-bit (long) magic.
>4.2BSD in fact doesn't require it, although previous versions of the GNU autoconf tutorial wrongly claimed this ("10. Portable Shell Programming", corrected with release 2.64, 2009-07-26).
>But instead, see 4.2BSD, /usr/src/sys/sys/kern_exec.c (the first regular occurence). A blank is accepted but not required.
それ間違っている
https://www.in-ulm.de/~mascheck/various/shebang/#blankrequired
>You may also read, that (allegedly) such a kernel parses "#! /" as a 32-bit (long) magic.
>4.2BSD in fact doesn't require it, although previous versions of the GNU autoconf tutorial wrongly claimed this ("10. Portable Shell Programming", corrected with release 2.64, 2009-07-26).
>But instead, see 4.2BSD, /usr/src/sys/sys/kern_exec.c (the first regular occurence). A blank is accepted but not required.
572デフォルトの名無しさん
2020/02/09(日) 12:28:36.33ID:mw6BsSoR pgrepには検索文字数の制限があるのか?
573デフォルトの名無しさん
2020/02/09(日) 12:29:59.77ID:3rHefPWY そんなのあるのか? pgr
574デフォルトの名無しさん
2020/02/09(日) 13:26:52.28ID:u8D56ofC >>572
どこ情報?
どこ情報?
575デフォルトの名無しさん
2020/02/09(日) 14:04:29.38ID:Fnglc4p2 >>563
あなたはC言語がUNIXを作るために作られた言語だと知らないの?
あなたはC言語がUNIXを作るために作られた言語だと知らないの?
576デフォルトの名無しさん
2020/02/09(日) 14:07:08.39ID:Fnglc4p2 >>569
そもそもどのUNIX、Linuxの話をしているのか?
そもそもどのUNIX、Linuxの話をしているのか?
577デフォルトの名無しさん
2020/02/09(日) 14:20:04.33ID:QqkdphAP >>575
それがどう話につながるのか説明してくれ
それがどう話につながるのか説明してくれ
578デフォルトの名無しさん
2020/02/09(日) 14:57:41.05ID:RDxzsaY4 shellはUNIX上でのいちプログラム、UNIXはCで作られてる。shellだってCで(途中から?)作られていただろう。故に、
>当時はそういうことをするときの標準的な単語はなく、includeやimportの方がたまたま有名になった
ということはなく、同じならinclude使うんじゃねってとこかな?なんか違うから違うのにしたという方が読みやすいかなあ
shell scriptはPrologの構文が元じゃなかったっけ。ちょっとググったとこでは、
:-
か。なんかこれに似てるといえば似てるな . は
>当時はそういうことをするときの標準的な単語はなく、includeやimportの方がたまたま有名になった
ということはなく、同じならinclude使うんじゃねってとこかな?なんか違うから違うのにしたという方が読みやすいかなあ
shell scriptはPrologの構文が元じゃなかったっけ。ちょっとググったとこでは、
:-
か。なんかこれに似てるといえば似てるな . は
579デフォルトの名無しさん
2020/02/09(日) 15:11:26.44ID:Fnglc4p2 >>577
先に存在しているC言語とは別の考えで設計されている。カリフォルニア大学のバークレー校の複数人が考えたものだから、統一感がないのは仕方ない。
先に存在しているC言語とは別の考えで設計されている。カリフォルニア大学のバークレー校の複数人が考えたものだから、統一感がないのは仕方ない。
580デフォルトの名無しさん
2020/02/09(日) 15:48:09.09ID:mPwdKOvO581デフォルトの名無しさん
2020/02/09(日) 16:48:41.40ID:RDxzsaY4582デフォルトの名無しさん
2020/02/09(日) 16:50:22.96ID:u8D56ofC for a in XXX; do
somecmd...
done
↑ここのXXXの大きさについて、SUSやらで文書化された制限ってある?
もしあるとすればどう調べればいいかな。
XXXは引数じゃないからARG_MAXとかじゃないし、
もしかしたら実質無制限?(システムのメモリに依存とか?)
somecmd...
done
↑ここのXXXの大きさについて、SUSやらで文書化された制限ってある?
もしあるとすればどう調べればいいかな。
XXXは引数じゃないからARG_MAXとかじゃないし、
もしかしたら実質無制限?(システムのメモリに依存とか?)
583デフォルトの名無しさん
2020/02/09(日) 19:33:12.64ID:wmQivLfL ksh 2020がでたのは知ってるけどkshに一体何が起きてるんです?
20年以上の開発がゴミクズとして消えるんですか?
Rewinding this repo and encouraging community
https://github.com/att/ast/issues/1466
20年以上の開発がゴミクズとして消えるんですか?
Rewinding this repo and encouraging community
https://github.com/att/ast/issues/1466
584デフォルトの名無しさん
2020/02/10(月) 00:06:22.74ID:jvWR6fCp https://github.com/att/ast/tree/ksh2020
This branch is not supported
This branch contains the ksh2020 version of the AST tools, from January 2020,
which primarily written and maintained by @krader1961 and @siteshwar.
This branch is not supported or maintained by AT&T; the repo at
https://github.com/att/ast only officially hosts ksh93u+ and the experimental ksh93v- branch.
See #1464 and #1466 for discussion and history of this decision.
Please search for forks of this repo if you are looking for ksh2020.
This branch is not supported
This branch contains the ksh2020 version of the AST tools, from January 2020,
which primarily written and maintained by @krader1961 and @siteshwar.
This branch is not supported or maintained by AT&T; the repo at
https://github.com/att/ast only officially hosts ksh93u+ and the experimental ksh93v- branch.
See #1464 and #1466 for discussion and history of this decision.
Please search for forks of this repo if you are looking for ksh2020.
585デフォルトの名無しさん
2020/02/10(月) 00:08:02.47ID:jvWR6fCp https://github.com/att/ast/issues/1466
私はAT&T Labs Research で@lkoutsofiosと協力し、コミュニティが
快適な状態にレポを復元できるかどうかを確認するためにボランティアで参加しました。これは最後に#1464で議論されました。
私はkshや技術的な問題の専門家ではなく、歴史全体を知りませんが、私の理解は
1. ksh93u +は、AT&Tからの最終的な公式リリースです。これはブランチ2012-08-01-masterにあります
2. 後のバージョンであるksh93v-は、AT&Tを離れた後に元の作者によって提供されましたが、
このバージョンは安定しているとは見なされません。これはタグksh93vで見つけることができます
3. @ krader1961はmasterブランチを数年間維持しています。彼はコードベースを合理化しようとしました
(そしてastの残りではなくkshのみをサポートしました)が、これは互換性の問題を引き起こしました。
kshの元の作者はすべてAT&Tを去りました。社内にはまだ多くのユーザーがいますが、
プロジェクトを維持および管理できるユーザーはいません。
私はAT&T Labs Research で@lkoutsofiosと協力し、コミュニティが
快適な状態にレポを復元できるかどうかを確認するためにボランティアで参加しました。これは最後に#1464で議論されました。
私はkshや技術的な問題の専門家ではなく、歴史全体を知りませんが、私の理解は
1. ksh93u +は、AT&Tからの最終的な公式リリースです。これはブランチ2012-08-01-masterにあります
2. 後のバージョンであるksh93v-は、AT&Tを離れた後に元の作者によって提供されましたが、
このバージョンは安定しているとは見なされません。これはタグksh93vで見つけることができます
3. @ krader1961はmasterブランチを数年間維持しています。彼はコードベースを合理化しようとしました
(そしてastの残りではなくkshのみをサポートしました)が、これは互換性の問題を引き起こしました。
kshの元の作者はすべてAT&Tを去りました。社内にはまだ多くのユーザーがいますが、
プロジェクトを維持および管理できるユーザーはいません。
586デフォルトの名無しさん
2020/02/10(月) 00:11:44.63ID:jvWR6fCp 私の提案は:
・ 現在のマスターをブランチ「ksh2020」(または適切なもの)に移動します。
・そのブランチのREADME.mdおよびCHANGELOG.mdをメンテナンスされていないものとして
明確にマークします。#1464をポイントし、詳細についてはこの問題を参照してください。
・ マスターブランチを2012-08-01-masterにリセットします
・リポジトリから外部の共同編集者を削除します。AT&Tの誰もこれを維持していないので、
このフォークをアクティブなものにすることは意味がありません。GitとGithubを使用すると、
誰でも自分のスペースで好きな方向にコードを取得できます。
・ 現在のマスターをブランチ「ksh2020」(または適切なもの)に移動します。
・そのブランチのREADME.mdおよびCHANGELOG.mdをメンテナンスされていないものとして
明確にマークします。#1464をポイントし、詳細についてはこの問題を参照してください。
・ マスターブランチを2012-08-01-masterにリセットします
・リポジトリから外部の共同編集者を削除します。AT&Tの誰もこれを維持していないので、
このフォークをアクティブなものにすることは意味がありません。GitとGithubを使用すると、
誰でも自分のスペースで好きな方向にコードを取得できます。
587デフォルトの名無しさん
2020/02/10(月) 00:12:00.37ID:jvWR6fCp ・ README.mdをクリーンアップして、現在の状態を反映します。「このレポには、ASTの
AT&T ksh93u +および試験的なksh93v-バージョンが含まれます。ASTおよびkshのフォークは
後である可能性があります。」
・ CONTRIBUTING.mdを変更し、テンプレートを明確にして、このフォークを
積極的に維持しておらず、何も確認しないことを約束します。
・リポジトリの説明を「AST-AT&T Software Technology」に短縮します(#1441)
これが完了したら、AT&Tでmasterブランチのksh93u +にパッチを提供する可能性があります。
些細なこと(ビルドの問題など)でない限り、貢献を確認したり受け入れたりすることはおそらくないでしょう。
最終的には、このリポジトリをアーカイブします。
現在、会社の誰もがkshのためだけにレポを作成するつもりはないと思います。
しかし、これはかなり簡単で、コミュニティが取り上げることができると思います。
AT&T ksh93u +および試験的なksh93v-バージョンが含まれます。ASTおよびkshのフォークは
後である可能性があります。」
・ CONTRIBUTING.mdを変更し、テンプレートを明確にして、このフォークを
積極的に維持しておらず、何も確認しないことを約束します。
・リポジトリの説明を「AST-AT&T Software Technology」に短縮します(#1441)
これが完了したら、AT&Tでmasterブランチのksh93u +にパッチを提供する可能性があります。
些細なこと(ビルドの問題など)でない限り、貢献を確認したり受け入れたりすることはおそらくないでしょう。
最終的には、このリポジトリをアーカイブします。
現在、会社の誰もがkshのためだけにレポを作成するつもりはないと思います。
しかし、これはかなり簡単で、コミュニティが取り上げることができると思います。
588デフォルトの名無しさん
2020/02/10(月) 00:27:01.24ID:jvWR6fCp こういうこと?
1. AST-AT&T Software Technologyはkshだけのプロジェクトではない。kshはASTプロジェクトの一部
2. 誰かがkshだけをメンテナンスしていた。ASTプロジェクト全体をメンテナンスしてる人はいない
3. 今リリースされてるksh 2020はそれ
4. ksh 2020 は後方互換性がなく古いスクリプトが動かなくなっていた
5. それは困るのでmasterを2012-08-01-masterにリセットしてアーカイブする
6. AT&Tはこのリポジトリをメンテナンスしない。 誰か開発したいのなら、ksh2020ブランチから続きをやれ
7. ksh2020ブランチにはもうメンテナンスしてないって書いてあるからそれ消してから勝手に続きをやれ
1. AST-AT&T Software Technologyはkshだけのプロジェクトではない。kshはASTプロジェクトの一部
2. 誰かがkshだけをメンテナンスしていた。ASTプロジェクト全体をメンテナンスしてる人はいない
3. 今リリースされてるksh 2020はそれ
4. ksh 2020 は後方互換性がなく古いスクリプトが動かなくなっていた
5. それは困るのでmasterを2012-08-01-masterにリセットしてアーカイブする
6. AT&Tはこのリポジトリをメンテナンスしない。 誰か開発したいのなら、ksh2020ブランチから続きをやれ
7. ksh2020ブランチにはもうメンテナンスしてないって書いてあるからそれ消してから勝手に続きをやれ
589デフォルトの名無しさん
2020/02/10(月) 08:02:14.12ID:RPv+4ALj Google翻訳使うなとは言わないけど,わざわざそれをスレに載せるな。
せめて自分で訳したものならともかく,なんの情報でもない。
せめて自分で訳したものならともかく,なんの情報でもない。
590デフォルトの名無しさん
2020/02/10(月) 08:09:49.99ID:jvWR6fCp え?翻訳すらしないでコピペすることだってあるじゃん
そういうのを引用っていうんだよ。
引用したらだめってこと?意味がわからないなぁ
そういうのを引用っていうんだよ。
引用したらだめってこと?意味がわからないなぁ
591デフォルトの名無しさん
2020/02/10(月) 11:18:22.31ID:RPv+4ALj >>590
飛躍しすぎ。
スレと関係ないただの忠告になるからこれ以上言わんが、
引用するななんて一言も言ってないし,ただの引用のほうがよほどマシ。
ていうかGoogle翻訳したものを貼り付けて「引用」って……
あなたはGoogle翻訳(機械翻訳全般)を信じてるのかも知れないけれども,
2020年現在,これらの翻訳の質は,あなたが貼り付けた文章を見ても分かる通り,酷いもの。
半分「嘘っぱち」の文章が出てると言っても過言じゃない。
特に,機械翻訳の中でも,minhonやlibtr8nとは違って,Google翻訳は2018年ころから
「学習した英語・日本語訳文からそれっぽい文字の並びを引っ張ってくる」っていう手法を取るようになったから
「見てくれは他の機械翻訳より自然≠セけど内容が全くデタラメ」っていう最悪の事態を生み出すようになってしまった。
幸か不幸か,あなたが貼り付けた文章にそこまで酷い誤謬はないけど,上述の翻訳手法である以上,
Google翻訳した文書を貼り付けるのは,原文を貼り付けるより酷いばかりか,
何も情報を提供せずに各自がリンク先なんかで情報を確認するよう要求するほうがよほどマシなくらい。
あなたは悪気なくGoogle翻訳を使って,スレに貢献しようとしたのかもしれない。
リンク先の文書の内重要と思われる部分をスレ本体に引用することは悪いことじゃないけれど,
そこでGoogle翻訳を使ってしまうのは,ちょっとキツい言い方になるけど「嘘を教える」ことに繋がってきてしまう。
もしこれからリンク先の文章を引用する機会があれば,原文を貼り付けるか,下手でもいいから自分で翻訳してみてね。
飛躍しすぎ。
スレと関係ないただの忠告になるからこれ以上言わんが、
引用するななんて一言も言ってないし,ただの引用のほうがよほどマシ。
ていうかGoogle翻訳したものを貼り付けて「引用」って……
あなたはGoogle翻訳(機械翻訳全般)を信じてるのかも知れないけれども,
2020年現在,これらの翻訳の質は,あなたが貼り付けた文章を見ても分かる通り,酷いもの。
半分「嘘っぱち」の文章が出てると言っても過言じゃない。
特に,機械翻訳の中でも,minhonやlibtr8nとは違って,Google翻訳は2018年ころから
「学習した英語・日本語訳文からそれっぽい文字の並びを引っ張ってくる」っていう手法を取るようになったから
「見てくれは他の機械翻訳より自然≠セけど内容が全くデタラメ」っていう最悪の事態を生み出すようになってしまった。
幸か不幸か,あなたが貼り付けた文章にそこまで酷い誤謬はないけど,上述の翻訳手法である以上,
Google翻訳した文書を貼り付けるのは,原文を貼り付けるより酷いばかりか,
何も情報を提供せずに各自がリンク先なんかで情報を確認するよう要求するほうがよほどマシなくらい。
あなたは悪気なくGoogle翻訳を使って,スレに貢献しようとしたのかもしれない。
リンク先の文書の内重要と思われる部分をスレ本体に引用することは悪いことじゃないけれど,
そこでGoogle翻訳を使ってしまうのは,ちょっとキツい言い方になるけど「嘘を教える」ことに繋がってきてしまう。
もしこれからリンク先の文章を引用する機会があれば,原文を貼り付けるか,下手でもいいから自分で翻訳してみてね。
592デフォルトの名無しさん
2020/02/10(月) 11:56:29.56ID:jvWR6fCp >>591
はは、的外れすぎてワロタw
英語をそのまま貼ってもリンク先読まない人が多いから
単に変換しただけ。英語というだけでスルーする
日本語ならぱっと見でわかる。内容が気になったのならリンク先読みなさい。
読んだのなら貼り付けた意味があったということ
はは、的外れすぎてワロタw
英語をそのまま貼ってもリンク先読まない人が多いから
単に変換しただけ。英語というだけでスルーする
日本語ならぱっと見でわかる。内容が気になったのならリンク先読みなさい。
読んだのなら貼り付けた意味があったということ
593デフォルトの名無しさん
2020/02/10(月) 19:24:20.30ID:SWS6qR4K 宮城県に住んでるだったかの誰かにそっくりだな
594デフォルトの名無しさん
2020/02/10(月) 19:51:47.28ID:RPv+4ALj595デフォルトの名無しさん
2020/02/10(月) 21:25:40.41ID:MJVq5TQy596デフォルトの名無しさん
2020/02/10(月) 21:40:51.77ID:4n8TqQDg 擁護賛同してるのか?あそこの初っ端は間違っているけどな
直してやれよ
直してやれよ
597デフォルトの名無しさん
2020/02/12(水) 17:16:49.73ID:SPYER+lN コマンドの速度を測りたいときに出力を/dev/nullに捨てるとその影響で
出力を捨てないときより速く計測されてしまうことがあるんだけど
例:
$ time { < /usr/bin/od od -A nx -t x1 -v; }
...
出力略
...
real 0m0.055s
user 0m0.042s
sys 0m0.008s
$
$ time { < /usr/bin/od od -A nx -t x1 -v > /dev/null; }
real 0m0.020s
user 0m0.020s
sys 0m0.000s
これを防ぐために「端末上に書き出してるのと同じくらいの負荷が書かるけど、実際には端末上に出力されない」
みたいな状況を作りたい。
おしえてください。
出力を捨てないときより速く計測されてしまうことがあるんだけど
例:
$ time { < /usr/bin/od od -A nx -t x1 -v; }
...
出力略
...
real 0m0.055s
user 0m0.042s
sys 0m0.008s
$
$ time { < /usr/bin/od od -A nx -t x1 -v > /dev/null; }
real 0m0.020s
user 0m0.020s
sys 0m0.000s
これを防ぐために「端末上に書き出してるのと同じくらいの負荷が書かるけど、実際には端末上に出力されない」
みたいな状況を作りたい。
おしえてください。
598デフォルトの名無しさん
2020/02/12(水) 17:58:00.53ID:44kLfG7j pv 使うとか
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$ time { < /usr/bin/od od -A nx -t x1 -v; }
:
real 0m0.404s
user 0m0.024s
sys 0m0.005s
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$ time { < /usr/bin/od od -A nx -t x1 -v | pv -q -L2M > /dev/null; }
real 0m0.458s
user 0m0.019s
sys 0m0.007s
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$ time { < /usr/bin/od od -A nx -t x1 -v; }
:
real 0m0.404s
user 0m0.024s
sys 0m0.005s
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$ time { < /usr/bin/od od -A nx -t x1 -v | pv -q -L2M > /dev/null; }
real 0m0.458s
user 0m0.019s
sys 0m0.007s
599デフォルトの名無しさん
2020/02/12(水) 21:18:18.55ID:ngmZ90wk600597
2020/02/13(木) 19:02:20.33ID:qpgEIAWv601デフォルトの名無しさん
2020/02/13(木) 19:45:08.54ID:d+A9Zjku 標準出力バッファを無効にして/dev/nullに送り込むと良いかも。知らんけど
602デフォルトの名無しさん
2020/02/15(土) 07:57:33.28ID:TqNhf8oX ていうかtimeで測った絶対速度なんてほとんど信用できなくて、(ハードウェアの状態なんかに依存するから)
使い道としては複数のコマンドどうしの相対速度の比較が主でしょう。
ならば、両方とも> /dev/nullに捨てておけば、相対速度としては変化しないから速度比較の目的は果たせるのでは。
使い道としては複数のコマンドどうしの相対速度の比較が主でしょう。
ならば、両方とも> /dev/nullに捨てておけば、相対速度としては変化しないから速度比較の目的は果たせるのでは。
603デフォルトの名無しさん
2020/02/15(土) 09:41:54.81ID:LBGCL7FY リダイレクトとfdは概ね理解したけど3以上はどう使えばいいんです?
1>や2>は自然と使い分けてるけど1>&3を使う機会なくて
&>の方がまだ出番ある
1>や2>は自然と使い分けてるけど1>&3を使う機会なくて
&>の方がまだ出番ある
604デフォルトの名無しさん
2020/02/15(土) 11:02:57.91ID:vIJrSTGq >>603
スクリプト開始時の stdout や stderr を保存しておくのに使うぐらいかなあ
# stdout を fd=3 にコピー
exec 3>&1
# fd=1,2 を foo.log にリダイレクト
exec > foo.log 2>&1
echo "foo.log に途中経過出力中です..." >&3
...
echo "処理B開始" >&3
...
echo "終了しました" >&3
スクリプト開始時の stdout や stderr を保存しておくのに使うぐらいかなあ
# stdout を fd=3 にコピー
exec 3>&1
# fd=1,2 を foo.log にリダイレクト
exec > foo.log 2>&1
echo "foo.log に途中経過出力中です..." >&3
...
echo "処理B開始" >&3
...
echo "終了しました" >&3
605デフォルトの名無しさん
2020/02/15(土) 13:14:38.75ID:QAGa8Flq bashの問題なのか知らんけど、
CRとかLFとかTABとかVTとかをどう解釈するかって
制御するフラグってあったりする?OSがらみの設定でもいいけど
CRとかLFとかTABとかVTとかをどう解釈するかって
制御するフラグってあったりする?OSがらみの設定でもいいけど
606デフォルトの名無しさん
2020/02/15(土) 14:59:47.10ID:7hJxIdg7607デフォルトの名無しさん
2020/02/15(土) 17:24:25.12ID:LBGCL7FY608デフォルトの名無しさん
2020/02/15(土) 22:02:17.95ID:7TGox9oB >>606
sttyコマンドなのかな?
詳細は言えないけど、"予め構築された特定の環境"のみおかしくなる
(どうやって構築されたかは公開されてない)
それと近いと思われる環境を自分で作っても再現できなくて困っている。
evalやコマンド置換と改行やタブ含めたホワイトスペースに属する文字を
使ったときにおかしくなってるのはわかるんだが
どうやったらこんな状況を作れるんだろうか。なぞだ。
sttyコマンドなのかな?
詳細は言えないけど、"予め構築された特定の環境"のみおかしくなる
(どうやって構築されたかは公開されてない)
それと近いと思われる環境を自分で作っても再現できなくて困っている。
evalやコマンド置換と改行やタブ含めたホワイトスペースに属する文字を
使ったときにおかしくなってるのはわかるんだが
どうやったらこんな状況を作れるんだろうか。なぞだ。
609デフォルトの名無しさん
2020/02/15(土) 23:22:52.25ID:FhP/kA+H 頭悪い奴ってのは、おかしくなったとかエラーになったとかいうだけで、
どうなったのかメッセージはなんなのか、そこを書かないのは何でだぜ
おかしいのはシステムじゃなくておまえの頭だろうという
どうなったのかメッセージはなんなのか、そこを書かないのは何でだぜ
おかしいのはシステムじゃなくておまえの頭だろうという
610デフォルトの名無しさん
2020/02/15(土) 23:28:09.90ID:7TGox9oB evalするときに何故か構文エラーが起きたり
ホワイトスペースがどこかで消えたりしている。
ホワイトスペースがどこかで消えたりしている。
611デフォルトの名無しさん
2020/02/15(土) 23:28:21.51ID:2teiXV5j >詳細は言えないけど
なんだろ。単なるチラ裏なことを長々とというだけの
対処する側なのにその前置きでエスパー求めるなんてありえないし
なんだろ。単なるチラ裏なことを長々とというだけの
対処する側なのにその前置きでエスパー求めるなんてありえないし
612デフォルトの名無しさん
2020/02/15(土) 23:28:41.71ID:7TGox9oB もちろんその環境以外ではそんな事は起きていない。
だから制御する方法があるのだろうと思ってるがわからない。
だから制御する方法があるのだろうと思ってるがわからない。
613デフォルトの名無しさん
2020/02/15(土) 23:31:04.26ID:2teiXV5j614デフォルトの名無しさん
2020/02/15(土) 23:31:40.17ID:7TGox9oB >>613
具体的に書くとまずいことがあるからわざとぼやかしてる
具体的に書くとまずいことがあるからわざとぼやかしてる
615デフォルトの名無しさん
2020/02/15(土) 23:32:15.43ID:2teiXV5j だったら、チラ裏なげえな
616デフォルトの名無しさん
2020/02/15(土) 23:33:17.78ID:7TGox9oB 短くしたら、お前が俺にレスさせるようにしただけ。
最初に詳細は言えないって書いてるんだから察しろ
最初に詳細は言えないって書いてるんだから察しろ
617デフォルトの名無しさん
2020/02/15(土) 23:36:08.92ID:2teiXV5j618デフォルトの名無しさん
2020/02/15(土) 23:38:36.70ID:7TGox9oB619デフォルトの名無しさん
2020/02/15(土) 23:40:02.90ID:2teiXV5j620デフォルトの名無しさん
2020/02/15(土) 23:50:22.01ID:7TGox9oB621デフォルトの名無しさん
2020/02/15(土) 23:52:28.65ID:cPtDrAlk /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
622デフォルトの名無しさん
2020/02/15(土) 23:53:21.82ID:2teiXV5j 何を言っているのかなあ。意味不明すぎ
読めなさすぎだろう、独りよがりすぎだろう
読めなさすぎだろう、独りよがりすぎだろう
623デフォルトの名無しさん
2020/02/15(土) 23:57:25.05ID:7TGox9oB 理解能力がないという告白を見た瞬間w
624デフォルトの名無しさん
2020/02/16(日) 00:03:10.55ID:0ownCpNF >>609をみて、「頭悪いやつ〜おかしいのは〜お前の頭だろう」というのは言い過ぎだろう、わからないでもないけどw
てか「詳細は言えないけど」てあるやん、まあ、そういうことだろう。チラ裏だけどなw
ということで、611を書いた
そしたら、直前同時に610があった(それが609に反応してのなんて当たり前だろう。逆になんでそうじゃないと思うのか意味不明すぎ)
なんだかな、またふわっとしたことを。なので、613を書いた(アンカー付けるてるのはそゆことだよ)
そしたらならなんか616があったりしたが、まあ前後してたんだよ。そんなの当たり前にあるだろうに
>>623
お前は本当に自分視点しかなさすぎだぞ、マジでw
てか「詳細は言えないけど」てあるやん、まあ、そういうことだろう。チラ裏だけどなw
ということで、611を書いた
そしたら、直前同時に610があった(それが609に反応してのなんて当たり前だろう。逆になんでそうじゃないと思うのか意味不明すぎ)
なんだかな、またふわっとしたことを。なので、613を書いた(アンカー付けるてるのはそゆことだよ)
そしたらならなんか616があったりしたが、まあ前後してたんだよ。そんなの当たり前にあるだろうに
>>623
お前は本当に自分視点しかなさすぎだぞ、マジでw
625デフォルトの名無しさん
2020/02/16(日) 00:06:52.88ID:0ownCpNF 誤 そしたらならなんか616があったりしたが
正 そしたらならなんか612があったりしたが
正 そしたらならなんか612があったりしたが
626デフォルトの名無しさん
2020/02/16(日) 09:10:15.42ID:xg4O4sK0 sort -kについて正しく分かり易いサイトはないですか?
627デフォルトの名無しさん
2020/02/16(日) 12:16:49.32ID:O89bDljg628デフォルトの名無しさん
2020/02/16(日) 12:17:20.39ID:k2/UeE1A えいごなのでわかりやすくないです
629デフォルトの名無しさん
2020/02/16(日) 12:50:45.03ID:tUbalZD+630デフォルトの名無しさん
2020/02/16(日) 13:15:28.05ID:U5VJnWmt >>627
中国語の解説をご所望だそうだ
中国語の解説をご所望だそうだ
631デフォルトの名無しさん
2020/02/16(日) 14:38:33.35ID:O89bDljg おめーらイジワルだなw
632デフォルトの名無しさん
2020/02/16(日) 15:33:45.11ID:iNVxJNOu633デフォルトの名無しさん
2020/02/17(月) 08:01:59.15ID:ZjAffcZp 与えられた数字のファイルの行番号になにかを書き込むスクリプトってどう書くのが一番いいですかね。
一応 今 思い付いてるのは
与数をNNN,書き込む文字列をXXXとして
sed -n -e 'NNNs/.*/XXX/p'
↑こういうのかなと思ったんだけど
これだと新規ファイルを作成する目的には使えない…
一応 今 思い付いてるのは
与数をNNN,書き込む文字列をXXXとして
sed -n -e 'NNNs/.*/XXX/p'
↑こういうのかなと思ったんだけど
これだと新規ファイルを作成する目的には使えない…
634デフォルトの名無しさん
2020/02/17(月) 10:14:55.01ID:LO6gJc6j nl使えばいいだろ。POSIX標準の基本コマンド一覧見ろや
635デフォルトの名無しさん
2020/02/17(月) 10:37:47.88ID:ZjAffcZp >>634
nlにそんな機能あるの?
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nl.html
↑ここ見る限り
指定した行になにかを書き込むなんていう機能なさそうなんだけど。
nlにそんな機能あるの?
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nl.html
↑ここ見る限り
指定した行になにかを書き込むなんていう機能なさそうなんだけど。
636デフォルトの名無しさん
2020/02/17(月) 10:47:12.51ID:8g99SQEJ こういう事?
seq 10 | sed '5s/.*/& Here/'
seq 10 | sed '5s/.*/& Here/'
637デフォルトの名無しさん
2020/02/17(月) 11:12:00.77ID:ZjAffcZp638デフォルトの名無しさん
2020/02/17(月) 14:40:41.78ID:xPbhxlpI 配列に書いて要素番号と共に出力すれば
639デフォルトの名無しさん
2020/02/17(月) 14:53:39.21ID:qj5C8HtX おまえらよく
与えられた数字のファイルの行番号になにかを書き込むスクリプト
で何がいいたいのかわかるな
与えられた 数字のファイル の行番号なのか
与えられた数字 のファイルの行番号なのか
与えられた数字のファイル の行番号なのか
与えられた数字のファイルの行番号 なのか
さっぱりなんだがw
入力と出力の例を出せば、すぐに解決する問題だろうに
与えられた数字のファイルの行番号になにかを書き込むスクリプト
で何がいいたいのかわかるな
与えられた 数字のファイル の行番号なのか
与えられた数字 のファイルの行番号なのか
与えられた数字のファイル の行番号なのか
与えられた数字のファイルの行番号 なのか
さっぱりなんだがw
入力と出力の例を出せば、すぐに解決する問題だろうに
640デフォルトの名無しさん
2020/02/17(月) 14:56:06.69ID:qj5C8HtX > やりたいのは全部で何行必要か分からない状態で
> 次々に指定した行に文字列を書き込むってこと。
これもさっぱり
何行必要かわからないって、何の行数なのか
次々に指定した行って、どうやって指定するつもりなのか
示したスクリプトは別に10行という前提じゃなくても機能するし
元のファイルがないって、元のファイルってどのファイルだよ?
なければ作ればいいだけだろ?
> 次々に指定した行に文字列を書き込むってこと。
これもさっぱり
何行必要かわからないって、何の行数なのか
次々に指定した行って、どうやって指定するつもりなのか
示したスクリプトは別に10行という前提じゃなくても機能するし
元のファイルがないって、元のファイルってどのファイルだよ?
なければ作ればいいだけだろ?
641デフォルトの名無しさん
2020/02/17(月) 15:06:30.32ID:y136Nw0W 行ごとに何か処理したいならawkの出番なのでは?
642デフォルトの名無しさん
2020/02/17(月) 15:42:52.76ID:ZjAffcZp >>639
入力
linenumber=78
value='hoge huga'
linenumber=805
value='foo bar'
...
↓
出力
(空行)...
(78行目)hoge huga
(空行)...
(80行目)foo bar
こんな感じっすね。
入力は(この例では)変数に格納するような形式にしましたが
別にこれと決まった訳じゃないです。
入力
linenumber=78
value='hoge huga'
linenumber=805
value='foo bar'
...
↓
出力
(空行)...
(78行目)hoge huga
(空行)...
(80行目)foo bar
こんな感じっすね。
入力は(この例では)変数に格納するような形式にしましたが
別にこれと決まった訳じゃないです。
643デフォルトの名無しさん
2020/02/17(月) 15:45:24.56ID:ZjAffcZp >>641
うーん。それはまあ,sedでもawkでも同じことが言えますけど
どちらも既存のファイル(またはパイプ越しの既存の出力)に対しての行処理
が得意なんですよね。
一方いまやりたいことはファイルの新規作成であって
しかも最後まで行の総数が分からないという……
これはawkでどうにかするのは難しいのではと思います。
うーん。それはまあ,sedでもawkでも同じことが言えますけど
どちらも既存のファイル(またはパイプ越しの既存の出力)に対しての行処理
が得意なんですよね。
一方いまやりたいことはファイルの新規作成であって
しかも最後まで行の総数が分からないという……
これはawkでどうにかするのは難しいのではと思います。
644デフォルトの名無しさん
2020/02/17(月) 15:49:37.43ID:qj5C8HtX 行番号と文字列のペアが入ったデータ(ファイル)があって、
それに従って別のファイルの指定された行の頭に文字列を入れるってことね
ん?別のファイルの行の頭に文字列を入れるのか?
それとも単に、その出力通りに出すだけなのか?
その出力を作るだけなら簡単だろうけど・・・あーいやどちらも大差ないかw
それに従って別のファイルの指定された行の頭に文字列を入れるってことね
ん?別のファイルの行の頭に文字列を入れるのか?
それとも単に、その出力通りに出すだけなのか?
その出力を作るだけなら簡単だろうけど・・・あーいやどちらも大差ないかw
645デフォルトの名無しさん
2020/02/17(月) 15:50:05.60ID:P9Oy3OK5 先に行指定の最大値を取得すればええやろ?
646デフォルトの名無しさん
2020/02/17(月) 15:54:20.48ID:y136Nw0W それならもう無理せずperl,ruby,pythonあたりで書いたらいいんでないの?
647デフォルトの名無しさん
2020/02/17(月) 16:01:09.81ID:qj5C8HtX 入力ファイル形式を
78 hoge hug
805 foo bar
とする。行番号は小さい順に並んでいるものとする。
並んでいないならsortコマンドで並び替えられるのでどうでもいい
あとは、こんな感じのスクリプトを書いて
i=1
while read -r num string; do
while [ $i -lt "$num" ]; do
echo
i=$((i+1))
done
echo $string
i=$((i+1))
done
cat data.txt | script.sh とかすればいい
echoで空行出す所は、seqとかprintf '%s' "$@"とか使えば短くできるだろうな。
78 hoge hug
805 foo bar
とする。行番号は小さい順に並んでいるものとする。
並んでいないならsortコマンドで並び替えられるのでどうでもいい
あとは、こんな感じのスクリプトを書いて
i=1
while read -r num string; do
while [ $i -lt "$num" ]; do
echo
i=$((i+1))
done
echo $string
i=$((i+1))
done
cat data.txt | script.sh とかすればいい
echoで空行出す所は、seqとかprintf '%s' "$@"とか使えば短くできるだろうな。
648デフォルトの名無しさん
2020/02/17(月) 16:15:26.16ID:qj5C8HtX649デフォルトの名無しさん
2020/02/17(月) 16:25:32.91ID:qj5C8HtX 短くしてみた。バグとかはしらん
i=1 num=0
while [ "$i" -le "$num" ] || read -r num string; do
[ "$i" -eq "$num" ] && echo "$string" || echo " "
i=$((i+1))
done
i=1 num=0
while [ "$i" -le "$num" ] || read -r num string; do
[ "$i" -eq "$num" ] && echo "$string" || echo " "
i=$((i+1))
done
650デフォルトの名無しさん
2020/02/17(月) 16:31:22.20ID:2IQo7lRr >>637
どういうことをしたいのかよくわからんが、とりあえずtouchしておけばファイルは作れるんでないの?
どういうことをしたいのかよくわからんが、とりあえずtouchしておけばファイルは作れるんでないの?
651デフォルトの名無しさん
2020/02/17(月) 18:55:51.30ID:P9Oy3OK5 一旦配列に入れてからjoin風に出力
入力はsortされてなくても可
#! /usr/bin/env bash
while read -r num string; do
array[num]="$string"
done
index=( "${!array[@]}" )
for (( i=1; i<=${index[-1]}; i++)); do
if [ -v array["$i"] ];then
echo "${array[$i]}"
else
echo
fi
done
入力はsortされてなくても可
#! /usr/bin/env bash
while read -r num string; do
array[num]="$string"
done
index=( "${!array[@]}" )
for (( i=1; i<=${index[-1]}; i++)); do
if [ -v array["$i"] ];then
echo "${array[$i]}"
else
echo
fi
done
652デフォルトの名無しさん
2020/02/17(月) 21:12:48.06ID:ZjAffcZp >>650
いや,ただたんに新規作成したい訳じゃない…
いや,ただたんに新規作成したい訳じゃない…
653デフォルトの名無しさん
2020/02/18(火) 03:26:33.92ID:enVFBik2 Ruby で作った
以下のコードを、script.rb に保存して、
「ruby script.rb 行番号指定ファイル 入力ファイル」と実行する
ARGV[ 0 ] は、行番号指定ファイル
ARGV[ 1 ] は、入力ファイル
結果は、標準出力に出したので、ファイルへリダイレクトして下さい。
ただし、入力ファイルへはリダイレクトしないように!
行番号指定ファイルは「数字・半角空白・文字列」の順番です。
ただし、行は数字でソートされていること
3 あ い
7 ab
# 行番号指定ファイルを、[ 行番号, 文字列 ] の、2次元配列に読み込む。
# 1行ずつ処理する。末尾の改行を削除する
line_num_ary = File.foreach( ARGV[ 0 ], chomp: true ).with_object( [ ] ) do |line, ary|
tmp_ary = line.split( nil, 2 ) # 空白で、2つに分割する
tmp_ary[ 0 ] = Integer( tmp_ary[ 0 ], 10 ) # 数値型に変換する
ary.push tmp_ary
end
次へ続く
以下のコードを、script.rb に保存して、
「ruby script.rb 行番号指定ファイル 入力ファイル」と実行する
ARGV[ 0 ] は、行番号指定ファイル
ARGV[ 1 ] は、入力ファイル
結果は、標準出力に出したので、ファイルへリダイレクトして下さい。
ただし、入力ファイルへはリダイレクトしないように!
行番号指定ファイルは「数字・半角空白・文字列」の順番です。
ただし、行は数字でソートされていること
3 あ い
7 ab
# 行番号指定ファイルを、[ 行番号, 文字列 ] の、2次元配列に読み込む。
# 1行ずつ処理する。末尾の改行を削除する
line_num_ary = File.foreach( ARGV[ 0 ], chomp: true ).with_object( [ ] ) do |line, ary|
tmp_ary = line.split( nil, 2 ) # 空白で、2つに分割する
tmp_ary[ 0 ] = Integer( tmp_ary[ 0 ], 10 ) # 数値型に変換する
ary.push tmp_ary
end
次へ続く
654653
2020/02/18(火) 03:27:41.15ID:enVFBik2 last_line_num = line_num_ary.last[ 0 ] # 最後の行番号
line_count = nil # ファイルの行数
if FileTest.file? ARGV[ 1 ] # 入力ファイルがあれば
open( ARGV[ 1 ] ) do |f|
while f.gets; end # ファイルを最後まで読む
line_count = f.lineno # ファイルの行数
end
# 最後の行番号の方が、入力ファイルの行数よりも大きい場合は、空行を追加して、同じ行数にする
if last_line_num > line_count
open( ARGV[ 1 ], "a" ) do |f| # 追記
( last_line_num - line_count ).times { f.puts }
end
end
else # 入力ファイルが無ければ、最後の行番号の数だけ、空行を挿入する
open( ARGV[ 1 ], "w" ) do |f| # 書き込み
last_line_num.times { f.puts }
end
end
# 末尾の改行を削除して、配列に読み込む
input_ary = File.readlines( ARGV[ 1 ], chomp: true )
# 行番号で指定された行の、内容を置き換える
line_num_ary.each { |ary| input_ary[ ary[ 0 ] - 1 ] = ary[ 1 ] }
puts input_ary
line_count = nil # ファイルの行数
if FileTest.file? ARGV[ 1 ] # 入力ファイルがあれば
open( ARGV[ 1 ] ) do |f|
while f.gets; end # ファイルを最後まで読む
line_count = f.lineno # ファイルの行数
end
# 最後の行番号の方が、入力ファイルの行数よりも大きい場合は、空行を追加して、同じ行数にする
if last_line_num > line_count
open( ARGV[ 1 ], "a" ) do |f| # 追記
( last_line_num - line_count ).times { f.puts }
end
end
else # 入力ファイルが無ければ、最後の行番号の数だけ、空行を挿入する
open( ARGV[ 1 ], "w" ) do |f| # 書き込み
last_line_num.times { f.puts }
end
end
# 末尾の改行を削除して、配列に読み込む
input_ary = File.readlines( ARGV[ 1 ], chomp: true )
# 行番号で指定された行の、内容を置き換える
line_num_ary.each { |ary| input_ary[ ary[ 0 ] - 1 ] = ary[ 1 ] }
puts input_ary
655デフォルトの名無しさん
2020/02/18(火) 03:35:49.66ID:dYxIHNEw >>649
これが一番だな。短くてbash依存なし。ruby依存なしw
これが一番だな。短くてbash依存なし。ruby依存なしw
656デフォルトの名無しさん
2020/02/18(火) 09:24:28.92ID:2AC9Ct1n いや、それちょっとした文字列操作したくなった時点で相当めんどくさくなるだろ。。
てきとーなスクリプト言語使う方が正解だわ。
シェルで書くことに意固地になってるだけだろ。
てきとーなスクリプト言語使う方が正解だわ。
シェルで書くことに意固地になってるだけだろ。
657デフォルトの名無しさん
2020/02/18(火) 09:30:40.26ID:HqsHcaRa 別にならんだろ。まああれだ、シェル芸しかできなくて
シェルプログラミングできないやつが
ごまかすために言ってるんだろうなと
シェルプログラミングできないやつが
ごまかすために言ってるんだろうなと
658デフォルトの名無しさん
2020/02/18(火) 09:53:00.13ID:2AC9Ct1n あ、普通に馬鹿なんだな。。
もしかしてユニケージの人か?
もしかしてユニケージの人か?
659デフォルトの名無しさん
2020/02/18(火) 10:03:42.59ID:HqsHcaRa ユニケージを見ればわかるが、あれは使い物にならない
特定業務専用のコマンド集でしか無い
そんなことよりさ、自分でコード書けないの?
特定業務専用のコマンド集でしか無い
そんなことよりさ、自分でコード書けないの?
660デフォルトの名無しさん
2020/02/18(火) 10:04:48.16ID:HqsHcaRa 文字列操作の何が面倒なのか知らんが、文字列操作はC言語よりもずっと楽なんだがね。
コマンド呼び出しだけを見れば他のどの言語よりも優れてるし
コマンド呼び出しだけを見れば他のどの言語よりも優れてるし
661デフォルトの名無しさん
2020/02/18(火) 10:42:09.68ID:X2bVDQHa > てきとーなスクリプト言語
シェルスクリプトとか?w
シェルスクリプトとか?w
662デフォルトの名無しさん
2020/02/18(火) 14:37:02.43ID:gCN/+gaX >>660
ていうか実はシェルスクリプトって
PythonでいうC API的なものの嚆矢であり最前線なんだよね。
C言語の標準入出力・ファイル読出/書込をシェルでやって
数値計算とかバイナリ解析とかそういう部分はC言語でコマンド作って任せるっていう。
ていうか実はシェルスクリプトって
PythonでいうC API的なものの嚆矢であり最前線なんだよね。
C言語の標準入出力・ファイル読出/書込をシェルでやって
数値計算とかバイナリ解析とかそういう部分はC言語でコマンド作って任せるっていう。
663デフォルトの名無しさん
2020/02/18(火) 15:45:01.04ID:fdBjlYYo IT系の仕事してるけどアプリ作ってるときはコンパイルは普通だった
でもインフラの仕事をするとシェルスクリプト多数だった
シェルスクリプト作ってる人たちはコンパイルの概念が分からないらしかった
プログラムはビルドしてリリースしてとソースと実行ファイルの管理が面倒だけど
シェルスクリプトって即物的なのがいい
でもインフラの仕事をするとシェルスクリプト多数だった
シェルスクリプト作ってる人たちはコンパイルの概念が分からないらしかった
プログラムはビルドしてリリースしてとソースと実行ファイルの管理が面倒だけど
シェルスクリプトって即物的なのがいい
664デフォルトの名無しさん
2020/02/18(火) 17:27:39.45ID:X8dqmLc9 1 2
3 4
みたいなhoge.txtがあって
cat hoge.txt | sed "s/\t/,/g" > piyo.csv
ってやってもhogeのままなんですけど
cat hoge.txt | tr " \t" "," > piyo.csv
ってやると上手くいきました、mac環境なんですけど
何が原因なのか分かりません…
sedの置換対象に数字を入れた場合は上手くいきました
3 4
みたいなhoge.txtがあって
cat hoge.txt | sed "s/\t/,/g" > piyo.csv
ってやってもhogeのままなんですけど
cat hoge.txt | tr " \t" "," > piyo.csv
ってやると上手くいきました、mac環境なんですけど
何が原因なのか分かりません…
sedの置換対象に数字を入れた場合は上手くいきました
665デフォルトの名無しさん
2020/02/18(火) 17:30:18.44ID:hjlsDnk2 1 と 2 の間にあるのがスペースなんじゃ…
666デフォルトの名無しさん
2020/02/18(火) 20:22:18.38ID:wp4bvOJX667デフォルトの名無しさん
2020/02/18(火) 20:27:51.93ID:VB0SzzBs >>664
mac の sed は \t をタブ文字として扱わないらしいね
https://stackoverflow.com/questions/5398395/how-can-i-insert-a-tab-character-with-sed-on-os-x/5398453#5398453
sed "s/$(printf '\t')/,/g" はどうかな
printf も \t 非対応なんてことはさすがに無いと思うけど
mac の sed は \t をタブ文字として扱わないらしいね
https://stackoverflow.com/questions/5398395/how-can-i-insert-a-tab-character-with-sed-on-os-x/5398453#5398453
sed "s/$(printf '\t')/,/g" はどうかな
printf も \t 非対応なんてことはさすがに無いと思うけど
668デフォルトの名無しさん
2020/02/18(火) 20:33:06.70ID:hjlsDnk2 tr " \t" "," となっていてスペースが含まれているから
上手くいっているんじゃないかと
上手くいっているんじゃないかと
669デフォルトの名無しさん
2020/02/18(火) 21:52:28.55ID:8C0JMYsF 665~668の方まで皆さんありがとうございます
とりあえず痴漢の成功例を○、上手くいかなかったのを×として
× tr " " ","
○ tr "\t" ","
× sed "s/\t/,/g" (\tを\\tに変える、クオーテーションを変えるなどしても同様)
○ sed "s/$(printf '\t')/,/g"
という感じでした。
macとlinuxでオプション違うのは経験で知ってたんですが正規表現にまで
関わってくるんですね…良い事を教えていただいてありがとうございます。
とりあえず痴漢の成功例を○、上手くいかなかったのを×として
× tr " " ","
○ tr "\t" ","
× sed "s/\t/,/g" (\tを\\tに変える、クオーテーションを変えるなどしても同様)
○ sed "s/$(printf '\t')/,/g"
という感じでした。
macとlinuxでオプション違うのは経験で知ってたんですが正規表現にまで
関わってくるんですね…良い事を教えていただいてありがとうございます。
670デフォルトの名無しさん
2020/02/18(火) 22:18:45.81ID:ObTpNy6/ macならgnu-sedをインストールしてそっち使ったほうが良い
671デフォルトの名無しさん
2020/02/19(水) 11:18:51.97ID:nP6c4IYT 痴漢の成功例っていやだなw
672デフォルトの名無しさん
2020/02/19(水) 12:03:18.50ID:pMNWrift 気が付かなかったww
673デフォルトの名無しさん
2020/02/21(金) 06:21:58.42ID:A/822pua $ ed -s <(seq 3) <<< $'3m1\n,p'
1
3
2
$ ed -s <(seq 3) <<< '3m1\n,p'
?
これでコマンドラインからedが使えるけどこの$ってどんな効果が?
付けないとこの通り表示されないし
1
3
2
$ ed -s <(seq 3) <<< '3m1\n,p'
?
これでコマンドラインからedが使えるけどこの$ってどんな効果が?
付けないとこの通り表示されないし
674デフォルトの名無しさん
2020/02/21(金) 07:58:16.90ID:0dzJ+7kH675デフォルトの名無しさん
2020/02/21(金) 14:48:04.29ID:A/822pua676デフォルトの名無しさん
2020/02/22(土) 16:39:03.63ID:C/dFKPoq kshのリポジトリのmasterが3400ぐらいあったコミットが13に減っていてワロタw
677デフォルトの名無しさん
2020/02/25(火) 12:18:34.54ID:S19Y4jrS grepの-eオプションみたく複数回指定できるオプション引数って
シェルスクリプトでどうやって処理するのが一般的なんかな。
getopts(1)の例
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html#tag_20_54_17
とかに載ってるような引数付き-bオプションに対して変数bflag=1, bval="$OPTARG"にする方法だと
最後に出現した-b XXXしか感知できないよね。
-b XX1 -b XX2 -b XX3
↑こういうコマンドライン引数があったときに-bオプションに対する引数を全部認識するようにしたい。
そういう処理をしているスクリプトのソースへのリンクとか教えてもらえるとすごく助かる。
シェルスクリプトでどうやって処理するのが一般的なんかな。
getopts(1)の例
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html#tag_20_54_17
とかに載ってるような引数付き-bオプションに対して変数bflag=1, bval="$OPTARG"にする方法だと
最後に出現した-b XXXしか感知できないよね。
-b XX1 -b XX2 -b XX3
↑こういうコマンドライン引数があったときに-bオプションに対する引数を全部認識するようにしたい。
そういう処理をしているスクリプトのソースへのリンクとか教えてもらえるとすごく助かる。
678デフォルトの名無しさん
2020/02/25(火) 12:53:16.03ID:5KSIeSvf 出現するたびになにかやればいいだけじゃん
679デフォルトの名無しさん
2020/02/25(火) 14:13:23.37ID:oSeHo6cg >>677
一般的かどうか知らないけど配列に入れて要素の数だけループさせてる
別のコマンドに渡すことが大半なのでループ内ではコマンド文字列を生成して実行はループの外でやる
while getopts “e:” opt; do
case "$opt" in
“e”) strings+=("$OPTARG");;
esac
done
shift $(($OPTIND - 1))
for value in "${strings[@]}"; do
…
done
一般的かどうか知らないけど配列に入れて要素の数だけループさせてる
別のコマンドに渡すことが大半なのでループ内ではコマンド文字列を生成して実行はループの外でやる
while getopts “e:” opt; do
case "$opt" in
“e”) strings+=("$OPTARG");;
esac
done
shift $(($OPTIND - 1))
for value in "${strings[@]}"; do
…
done
680デフォルトの名無しさん
2020/02/25(火) 15:00:07.73ID:mMwfySZI bash依存は甘え
681デフォルトの名無しさん
2020/02/25(火) 15:30:00.20ID:K+FIgRaj682デフォルトの名無しさん
2020/02/25(火) 15:45:41.88ID:K+FIgRaj 今更だけど、試しにNetBSDのgrepのソースコードを覗いてみたら、pattern[]配列に格納してたわ。
POSIXシェルみたいな配列に対応してないシェルでも0x1Fユニット区切り文字とか使えばいいかな。
POSIXシェルみたいな配列に対応してないシェルでも0x1Fユニット区切り文字とか使えばいいかな。
683デフォルトの名無しさん
2020/02/25(火) 17:02:15.34ID:eOOTHTW4 全てのシェルに配列はあるだろ? $@を使えばいいんだよ
あとはqiitaででも探せ。答えはそこにある。
あとはqiitaででも探せ。答えはそこにある。
684デフォルトの名無しさん
2020/02/25(火) 17:24:31.11ID:S19Y4jrS685デフォルトの名無しさん
2020/02/25(火) 17:25:41.11ID:S19Y4jrS サブシェルで処理すれば$@は引き継がれないから影響ないけど
そうすると今度は肝心要の、現在処理しているコマンドライン引数を全く参照できなくなる。
そうすると今度は肝心要の、現在処理しているコマンドライン引数を全く参照できなくなる。
686デフォルトの名無しさん
2020/02/25(火) 17:46:16.45ID:eOOTHTW4 サブシェルなんかいらねーだろ
関数使えよ
関数使えよ
687デフォルトの名無しさん
2020/02/25(火) 22:33:40.09ID:S19Y4jrS >>686
頭悪くて恥ずかしい限りだが、
スクリプトの例を書いてもらえないか。
excmd -a XXX -a YYY -a ZZZ
みたいなコマンドライン引数を解釈して、
全部読み切った後に-aオプションに対するオプション引数をそれぞれ取得できるっていう。
全部読み切った後ってのは、getoptやらで最後のオプションまで読み切って、
引数関連のエラーがないことを確かめてからってことね。
「-aオプションの出現を感知するたびに標準出力に出す」みたいなのじゃなく。
頭悪くて恥ずかしい限りだが、
スクリプトの例を書いてもらえないか。
excmd -a XXX -a YYY -a ZZZ
みたいなコマンドライン引数を解釈して、
全部読み切った後に-aオプションに対するオプション引数をそれぞれ取得できるっていう。
全部読み切った後ってのは、getoptやらで最後のオプションまで読み切って、
引数関連のエラーがないことを確かめてからってことね。
「-aオプションの出現を感知するたびに標準出力に出す」みたいなのじゃなく。
688デフォルトの名無しさん
2020/02/25(火) 22:48:26.39ID:8Uixj76j689デフォルトの名無しさん
2020/02/26(水) 08:09:52.20ID:vrfGqddo >>688
?
-aの位置の次にある引数を取得するってこと?
でもそうすると
-bcaXXX
↑こういうときはどう解析するの?(-b,-cは引数を取らないオプション)
この形式のオプションもPOSIXでは許可されてるから
当然解析できなければならないけど。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
?
-aの位置の次にある引数を取得するってこと?
でもそうすると
-bcaXXX
↑こういうときはどう解析するの?(-b,-cは引数を取らないオプション)
この形式のオプションもPOSIXでは許可されてるから
当然解析できなければならないけど。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
690デフォルトの名無しさん
2020/02/26(水) 08:25:40.38ID:iwwM4ZEx >>689
引数処理にこだわり始めるとスクリプト実行して引数解析終わるまで時間がかかるようになって
使い物にならなくなるので複雑な記法は全部捨てたわ
POSIXで許可されているから実装しなきゃならないというならPOSIXを窓から投げ捨てるべき
引数処理にこだわり始めるとスクリプト実行して引数解析終わるまで時間がかかるようになって
使い物にならなくなるので複雑な記法は全部捨てたわ
POSIXで許可されているから実装しなきゃならないというならPOSIXを窓から投げ捨てるべき
691デフォルトの名無しさん
2020/02/26(水) 08:29:52.36ID:kXv4PxDr692デフォルトの名無しさん
2020/02/26(水) 09:28:16.44ID:9H3dDcdo bash によるオプション解析 - Qiita
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
getoptsの存在すら知らずに横着して=~を使ってすまんな
オプションの集約ってこうも面倒だったのね
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
getoptsの存在すら知らずに横着して=~を使ってすまんな
オプションの集約ってこうも面倒だったのね
693デフォルトの名無しさん
2020/02/26(水) 09:48:23.19ID:re2OdmIW timeoutで終了するプログラムの最後の1行だけを表示させたいどうするの?
694デフォルトの名無しさん
2020/02/26(水) 09:54:37.39ID:kXv4PxDr >>692
どの言語にもオプション解析用のライブラリがある理由が分かったろ?
どの言語にもオプション解析用のライブラリがある理由が分かったろ?
695デフォルトの名無しさん
2020/02/26(水) 11:26:08.87ID:vrfGqddo ちなみにgetoptsコマンドはPOSIXで定義されてるけど,実はPOSIXが定めるオプション書式に対応していないっていう。
まあOpenGroup側も「任意のオプション引数は歴史的な理由以外で使ってはならない」って言ってる訳だし
仕方無い部分もあるけど。
一方で複数回登場する引数付きオプションは,ちゃんと現行のアプリケーションでの使用も許可されているにもかかわらず
getopts自身はそういうオプションに対する便利な機能をなんら提供してない。
まあOpenGroup側も「任意のオプション引数は歴史的な理由以外で使ってはならない」って言ってる訳だし
仕方無い部分もあるけど。
一方で複数回登場する引数付きオプションは,ちゃんと現行のアプリケーションでの使用も許可されているにもかかわらず
getopts自身はそういうオプションに対する便利な機能をなんら提供してない。
696デフォルトの名無しさん
2020/02/26(水) 13:10:48.18ID:iFRpldfA >>695
任意のオプション引数ってどういうもののことを言ってる?
任意のオプション引数ってどういうもののことを言ってる?
697デフォルトの名無しさん
2020/02/26(水) 13:41:46.61ID:vrfGqddo >>696
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここを読め…と突き放すのはあんまりなんで説明すると
“optional option-argument”---任意のオプション引数っていうのは,
当該オプションのあとにそのオプションに対する(一つの)引数が指定されてもされなくてもいいような
オプションのこと。
manページの「書式」節で
somecmd -o[arg]
みたいに書かれている場合が該当する。
これは
somecmd -o
の時は「オプション-oが引数なしで指定された」と解釈し
somecmd -oXXX
の時は「オプション-oが引数XXXで指定された」と解釈,
somecmd -o XXX
のときは「オプション-oと,(それとは直接関係ない)被演算子XXXが指定された」と解釈する
という決まりになってる。
なおPOSIXでは規程されてないけど,長いオプションの場合は
任意のオプション引数を指定したければオプションとオプション引数を=で結ぶのが通例みたい。
--long-opt=XXX
↑こういう感じ。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここを読め…と突き放すのはあんまりなんで説明すると
“optional option-argument”---任意のオプション引数っていうのは,
当該オプションのあとにそのオプションに対する(一つの)引数が指定されてもされなくてもいいような
オプションのこと。
manページの「書式」節で
somecmd -o[arg]
みたいに書かれている場合が該当する。
これは
somecmd -o
の時は「オプション-oが引数なしで指定された」と解釈し
somecmd -oXXX
の時は「オプション-oが引数XXXで指定された」と解釈,
somecmd -o XXX
のときは「オプション-oと,(それとは直接関係ない)被演算子XXXが指定された」と解釈する
という決まりになってる。
なおPOSIXでは規程されてないけど,長いオプションの場合は
任意のオプション引数を指定したければオプションとオプション引数を=で結ぶのが通例みたい。
--long-opt=XXX
↑こういう感じ。
698デフォルトの名無しさん
2020/02/26(水) 13:46:00.81ID:Z7ha8duC >>697
ああ、OKOK、ちゃんと分かってるね
ああ、OKOK、ちゃんと分かってるね
699デフォルトの名無しさん
2020/02/26(水) 15:55:24.01ID:vrfGqddo >>698
分かってもらえたみたいでよかった。
分かってもらえたみたいでよかった。
700デフォルトの名無しさん
2020/02/26(水) 23:24:46.41ID:iwwM4ZEx >>691
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
701デフォルトの名無しさん
2020/02/27(木) 00:12:01.62ID:nCyLO+2A Ruby の、OptionParser では、
require 'optparse'
ARGV.replace %w(-e abc -e あ)
opts = { }
ARGV.options do |o|
o.on( "-e パターン", "絞り込む" ) { |x|
( opts[ :pattern ] ||= [ ] ).push x } # 配列に追加する
o.parse!
end
p opts #=> { :pattern=>["abc", "あ"] }
require 'optparse'
ARGV.replace %w(-e abc -e あ)
opts = { }
ARGV.options do |o|
o.on( "-e パターン", "絞り込む" ) { |x|
( opts[ :pattern ] ||= [ ] ).push x } # 配列に追加する
o.parse!
end
p opts #=> { :pattern=>["abc", "あ"] }
702デフォルトの名無しさん
2020/02/27(木) 01:10:41.62ID:WuLbJO/f >>700
その一文字オプションの連結に対応しなければいいだけじゃん
その一文字オプションの連結に対応しなければいいだけじゃん
703デフォルトの名無しさん
2020/02/27(木) 10:15:09.64ID:1d0gnp8c704700
2020/02/28(金) 00:12:31.43ID:sbmuwMBZ706デフォルトの名無しさん
2020/02/28(金) 21:07:42.16ID:11SJpN8G > 個人的には -help が --help の書き間違いとして拾ってくれずに
-help が --help の書き間違いとして拾ってくれるものなんてある?
-help が --help の書き間違いとして拾ってくれるものなんてある?
707デフォルトの名無しさん
2020/02/28(金) 21:16:46.81ID:9ZnEM/be >>700
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...
外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
708デフォルトの名無しさん
2020/02/29(土) 08:02:48.75ID:A8pIm3Di うわぁー
709デフォルトの名無しさん
2020/02/29(土) 08:10:25.23ID:wnu08hYu 外部コマンドを使おうが使うまいが、パーサーのアルゴリズムに大差ないだろ?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
710700
2020/02/29(土) 09:04:49.63ID:toFJGN/1711デフォルトの名無しさん
2020/02/29(土) 09:27:10.60ID:Z90YN+Q9712デフォルトの名無しさん
2020/02/29(土) 13:13:04.89ID:IP0SEm6N なんか、車輪の再発明みたいなことになってるなw
713デフォルトの名無しさん
2020/02/29(土) 14:05:54.81ID:MM7sekhX getoptが使い物にならないんだから
作らないとしょうがない
作らないとしょうがない
714デフォルトの名無しさん
2020/03/01(日) 11:37:30.39ID:4tQoD8Fw × getopt
○ getopts
○ getopts
715デフォルトの名無しさん
2020/03/01(日) 12:51:34.60ID:4c8klxdl シェルスクリプト用のオプションパーサーって無いの?getopt/getopts以外で
716デフォルトの名無しさん
2020/03/01(日) 12:56:04.13ID:4tQoD8Fw717デフォルトの名無しさん
2020/03/01(日) 13:09:15.84ID:4c8klxdl >>716
それはgo製じゃん
それはgo製じゃん
718デフォルトの名無しさん
2020/03/01(日) 13:11:39.38ID:TiMroEot > docopts : the command line wrapper for bash.
719デフォルトの名無しさん
2020/03/01(日) 13:16:40.87ID:4c8klxdl bashってのもマイナス点だな
720デフォルトの名無しさん
2020/03/01(日) 14:02:23.94ID:4tQoD8Fw >>717
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?
俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?
俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
721デフォルトの名無しさん
2020/03/01(日) 14:28:49.88ID:4c8klxdl シェルスクリプト製じゃないと、1つのファイルに出来ないじゃん
722デフォルトの名無しさん
2020/03/01(日) 15:29:04.21ID:4tQoD8Fw × シェルスクリプト用のオプションパーサー
○ シェルスクリプト製のオプションパーサー
質問するときは明確な言葉で。
○ シェルスクリプト製のオプションパーサー
質問するときは明確な言葉で。
723デフォルトの名無しさん
2020/03/01(日) 16:13:34.61ID:DvIm3g7W ID:4c8klxdlの無能さ
724デフォルトの名無しさん
2020/03/02(月) 16:01:50.45ID:s5dtAso/ 外部コマンド使いなくないならBusyBoxみたいなの使うしかないよな。
725デフォルトの名無しさん
2020/03/02(月) 16:35:15.54ID:+7p1D0tE ビルトインコマンドでいいじゃん
726デフォルトの名無しさん
2020/03/02(月) 23:40:28.80ID:8PHDRupm -help が --help の書き間違いには、ならない。
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから
だから、オプションの連結を禁止すればよい
そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる
オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
-help は、h,e,l,p のオプションを連結した書き方で、文法的に正しいから
だから、オプションの連結を禁止すればよい
そうすれば、-h, -e, -l, -p みたいに、書かないといけないから、
-help は、絶対に間違いになるから、指摘できる
オプションの連結は、情報処理の教育を受けた社員を想定しているから、
勉強していないような素人には、難しすぎるw
727デフォルトの名無しさん
2020/03/03(火) 07:08:07.59ID:IKAJxND7 根本は中国人なのにマスコミも政府も絶対言わないし、
制限しない。
311の政府対応と同じ
政権変わっても変わらん
制限しない。
311の政府対応と同じ
政権変わっても変わらん
728デフォルトの名無しさん
2020/03/03(火) 07:53:58.76ID:4u1zxYLS 誤爆するガイキチ
729デフォルトの名無しさん
2020/03/03(火) 09:24:57.55ID:MNbayHdo >>726
情報処理の教育を受けた社員しか想定していないので問題ない
情報処理の教育を受けた社員しか想定していないので問題ない
730デフォルトの名無しさん
2020/03/03(火) 10:15:38.32ID:l2g6jfLd あとは自力で勉強探究心があるギーク向けだしな
731デフォルトの名無しさん
2020/03/03(火) 10:44:21.85ID:z64lrdXB find「せやな」
732デフォルトの名無しさん
2020/03/03(火) 12:18:09.49ID:3ukr+OhM 任意のオプション引数ってさ、
-help が -h elp って解釈されるよね?
-h -e -l -p とどうやって区別するの?
-help って書いた時どっちの意味になるの?
-help が -h elp って解釈されるよね?
-h -e -l -p とどうやって区別するの?
-help って書いた時どっちの意味になるの?
733デフォルトの名無しさん
2020/03/03(火) 12:32:47.35ID:yHaKKNdM あるスクリプトを作っていて、gitで管理しています。
~/src ← gitで管理
~/src/script.sh ← あるスクリプト
~/src/inc.sh ← あるスクリプトから読み込むライブラリ
script.sh から inc.sh を読み込むときに、
. ./inc.sh と書いています
script.sh をどのディレクトリからでも実行できるように
~/bin ディレクトリにシンボリックリンクを作成しました。
そして実行するとエラーになりました。
~/bin/inc.sh を読み込もうとしているからだと思いますが
いい解決方法はないでしょうか?
~/src ← gitで管理
~/src/script.sh ← あるスクリプト
~/src/inc.sh ← あるスクリプトから読み込むライブラリ
script.sh から inc.sh を読み込むときに、
. ./inc.sh と書いています
script.sh をどのディレクトリからでも実行できるように
~/bin ディレクトリにシンボリックリンクを作成しました。
そして実行するとエラーになりました。
~/bin/inc.sh を読み込もうとしているからだと思いますが
いい解決方法はないでしょうか?
734デフォルトの名無しさん
2020/03/03(火) 14:02:09.02ID:5O39EjRd735デフォルトの名無しさん
2020/03/03(火) 14:06:21.11ID:yHaKKNdM >>734
いろいろあって、そこはシンボリックじゃないとだめなんですよ
いろいろあって、そこはシンボリックじゃないとだめなんですよ
736デフォルトの名無しさん
2020/03/03(火) 17:07:25.01ID:FfxSBx1I737デフォルトの名無しさん
2020/03/03(火) 17:55:54.44ID:n9Ghdw3q >>733
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
inc.shも~/bin(や特定固定のとこ)にシンボリックリンクを置いてしまえ
とか
pathme="$(which "$0")";
[ -L "$pathme" ] && pathme="$(readlink "$pathme")"
. "$(dirname "$pathme")/inc.sh"
とか
738デフォルトの名無しさん
2020/03/03(火) 18:16:56.75ID:n9Ghdw3q >>733
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
>~/bin/inc.sh を読み込もうとしているからだと思いますが
./inc.sh とかいう相対パスは現在のワーキングディレクトリ/カレントディレクトリからのだよ。sourceも同じく特殊なことはせずに
"$(pwd)/inc.sh" を読み込もうとしているのだろう
739デフォルトの名無しさん
2020/03/03(火) 19:32:36.52ID:PcLjcySC >>737
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
やっぱりreadlink使うしか無いですかね。
シンボリックのシンボリックのシンボリックとか考慮すると
readlink -fが必要になるけど、macOS版だとgreadlinkじゃないと動かないし
そもそもgreadlinkが入ってないとか、その他のOSではどうなるの?とか。
そういう面倒なコードはライブラリにしたいけど、そのライブラリを読み込むのに苦労するというw
740デフォルトの名無しさん
2020/03/03(火) 19:58:06.90ID:BC6YzT5m 後出しかよ
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
シンボリックのシンボリックのシンボリック
なら、三行書けばいいだけじゃん
やっぱりって何がやっぱりなんだか
741デフォルトの名無しさん
2020/03/03(火) 20:06:11.93ID:BC6YzT5m pathme="$(command -v "$0")" || pathme="$0"
[ "$pathme" = "" ] && pathme="$0"
while [ -L "$pathme" ]; do
pathme="$(readlink "$pathme")"
done
. "$(dirname "$pathme")/inc.sh"
で、いいんじゃねえのかよぉ?なんでこんな簡単な対処も?と思うのでなんか穴があるか???
whichってPOSIXじゃなかったのね。煩そうだからそこも
[ "$pathme" = "" ] && pathme="$0"
while [ -L "$pathme" ]; do
pathme="$(readlink "$pathme")"
done
. "$(dirname "$pathme")/inc.sh"
で、いいんじゃねえのかよぉ?なんでこんな簡単な対処も?と思うのでなんか穴があるか???
whichってPOSIXじゃなかったのね。煩そうだからそこも
742デフォルトの名無しさん
2020/03/03(火) 20:07:32.72ID:BC6YzT5m あ、二行目はいらない。もしくは一行目の||の後ろ
743デフォルトの名無しさん
2020/03/03(火) 20:41:22.45ID:Lk6RorVj744デフォルトの名無しさん
2020/03/03(火) 20:47:57.53ID:BC6YzT5m なんかぐちぐち言っているけど、そんなこと対処すぐ自分でできるでしょなことをぐちぐちとという
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw
それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
ぐちぐち言う奴にはリアルでもムカつく沸点は低いのは確かだがなw
それと後出しなら当然のようにではなくて、すまんがが先にありがだろうに、何を当たり前のようにというのだな。リアルでもねw
745デフォルトの名無しさん
2020/03/03(火) 20:55:19.44ID:dHOuVCIc 意訳 謝罪しろ
746デフォルトの名無しさん
2020/03/03(火) 20:57:44.45ID:BC6YzT5m そう読めるなら、沸点は俺より低すぎだな
747デフォルトの名無しさん
2020/03/03(火) 20:59:54.63ID:FfxSBx1I つまり自分の沸点の低さは自覚してるって訳か。
ひとまず安心した。
ひとまず安心した。
748デフォルトの名無しさん
2020/03/03(火) 21:00:37.28ID:BC6YzT5m うむ。キレやすく冷めやすいなw
749デフォルトの名無しさん
2020/03/03(火) 21:01:39.37ID:UParEwxG 相手が何も考えてないと思ってるんだろうね。
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
そのやり方にはこういう問題があるって言ったら、
知ってるなら先にかけ!だもんな(苦笑)
750デフォルトの名無しさん
2020/03/03(火) 21:04:21.79ID:BC6YzT5m 読めてないな、全然w
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
のくせに絡みたいのね。苦笑がいい味付けだねw苦笑いするぞ
751デフォルトの名無しさん
2020/03/03(火) 21:05:27.34ID:V11R45Nz 毎度ながら回答者に問題があるよな
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
752デフォルトの名無しさん
2020/03/03(火) 21:07:13.53ID:BC6YzT5m 何をそんなにひ弱なのかわからん...当事者でもないのに
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
>>740でそんなにダメージ受けるのか?一応ちゃんと回答してもいるんだがな。ひ弱すぎだろう
753デフォルトの名無しさん
2020/03/03(火) 21:44:55.64ID:FfxSBx1I 弱い犬ほどなんとやら
754デフォルトの名無しさん
2020/03/03(火) 21:53:18.68ID:BC6YzT5m 本題ではない瑣末wなことに拘るねえ、延々と。その動機がわからん
そう言うことだよ、皮肉屋さん
そう言うことだよ、皮肉屋さん
755デフォルトの名無しさん
2020/03/04(水) 00:47:20.27ID:Hp65i7gp 煽るわけじゃないけどさ、シェル芸してる人って
アルゴリズムと呼べるようなコードを書ける人が少ない気がする
スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
アルゴリズムと呼べるようなコードを書ける人が少ない気がする
スクリプト言語で用意されてる便利な関数は使えても
その関数を自分で実装することはできないレベル
C言語で簡単な設定ファイルのパーサーも作れなさそう
756デフォルトの名無しさん
2020/03/04(水) 01:10:12.01ID:nNNW6i++ >>733
Ruby で言えば、
require './file' は、カレントディレクトリからの相対パスだけど、
require_relative './file' は、現在のファイルからの相対パスになる
つまり、require_relative './file' は、__dir__ + "/file"
__dir__ は、現在のソースファイル(__FILE__)のあるディレクトリ名を、正規化された絶対パスで返します。
シンボリックリンクも解決されます
Ruby で言えば、
require './file' は、カレントディレクトリからの相対パスだけど、
require_relative './file' は、現在のファイルからの相対パスになる
つまり、require_relative './file' は、__dir__ + "/file"
__dir__ は、現在のソースファイル(__FILE__)のあるディレクトリ名を、正規化された絶対パスで返します。
シンボリックリンクも解決されます
757701
2020/03/04(水) 01:34:09.01ID:nNNW6i++ >>732
Ruby の、OptionParser では、
-e オプションがあっても、-h オプションの引数、elp と解釈される
require 'optparse'
ARGV.replace %w(-help)
opts = { }
ARGV.options do |o|
o.on( "-e 引数", "引数" ) { |x| opts[ :e ] = x }
o.on( "-h 引数", "引数" ) { |x| opts[ :h ] = x }
o.parse!
end
p opts #=> {:h=>"elp"}
Ruby の、OptionParser では、
-e オプションがあっても、-h オプションの引数、elp と解釈される
require 'optparse'
ARGV.replace %w(-help)
opts = { }
ARGV.options do |o|
o.on( "-e 引数", "引数" ) { |x| opts[ :e ] = x }
o.on( "-h 引数", "引数" ) { |x| opts[ :h ] = x }
o.parse!
end
p opts #=> {:h=>"elp"}
758デフォルトの名無しさん
2020/03/04(水) 02:42:11.83ID:NN2zD8QV 知恵袋の最後の方で回答している気でいる雑種かな
759デフォルトの名無しさん
2020/03/04(水) 05:44:22.12ID:aHZx5rgw >>755
シェル芸ってなんの話?
シェル芸ってなんの話?
760デフォルトの名無しさん
2020/03/04(水) 08:01:55.10ID:1RejiZvB >>759
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中
シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中
シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸
目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
qiitaとかtwitterでシェル芸で検索するとわかるよ
難読化(笑)とか意味のないことを一行でやったすげーとか言ってる連中
シェルスクリプトにもプログラムを書くのに必要な機能はあるのに
一行(シェル芸)で書くか、さもなければ他の言語のライブラリを使うしかないって考えてる連中
シェルスクリプトで一行で書けなければ、他の言語を使って数行かけて書くが
そもそもシェルスクリプトで数行書けば、他の言語より短く実現できたりするのに
アルゴリズムを書く能力がないからそれができない。そういう奴らが好きな言葉がシェル芸
目的の機能がないと何も出来ない。プリミティブな機能を使って実現する思考能力が欠けている
761デフォルトの名無しさん
2020/03/04(水) 08:06:58.23ID:Eb7SAM7+ このスレでのだろう
自分がただ嫌悪しているのをいきなり表明されても
自分がただ嫌悪しているのをいきなり表明されても
762デフォルトの名無しさん
2020/03/04(水) 08:12:50.48ID:1RejiZvB 新しい話題を始めただけやで
763デフォルトの名無しさん
2020/03/04(水) 11:31:06.93ID:8C7aLz+2 一般論だが
目的が解決できれば解決策は簡単な方がいい
シェルスクリプトで一行で書けるのならそれにこしたことはない
シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
目的が解決できれば解決策は簡単な方がいい
シェルスクリプトで一行で書けるのならそれにこしたことはない
シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
764デフォルトの名無しさん
2020/03/04(水) 11:53:24.17ID:nNNW6i++ シェル芸は、Software Design で、上田隆一が連載しているものだろ。
次回で連載終了だけど
たいてい、awk を使う
次回で連載終了だけど
たいてい、awk を使う
765デフォルトの名無しさん
2020/03/04(水) 15:48:52.99ID:Tzh2DSUj >>764
シェルスクリプトでプログラミングしないなら
「POSIXコマンドプログラミング」って改名したほうが良いと思う
awkプログラミングでもいいけどなw
シェル(CLIから実行するもの)とシェルスクリプト(.shファイルにまとめたもの)と
厳密に区別してるならいいけど、実際にはシェルスクリプトの中でシェル芸してるんだよなw
例えばRubyなんかでも外部コマンドを呼び出せるわけでRubyのなかでシェル芸もできる。
これをRubyコードと呼べるかというと疑問がでるだろう?それと同じ。
>>763
> 目的が解決できれば解決策は簡単な方がいい
という条件からすると、Rubyのなかでシェル芸するのが正解なパターンは結構多いと思う。
でもやらないことの方が多いだろう。理由はなんだろうか?処理速度かな?
その理由と同じものが、シェルスクリプトにも当てはまると思う。
つまり(Rubyの場合と同様に)シェルスクリプトの中でシェル芸すんな(笑)
> シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
一行では書けなくても、数行書けば実現できることも多い。
シェル芸しかできないから、一行で書けなければムリと諦めてる奴が多い。
たとえばRubyだと1行でできることが、C言語だと数行かかることは多いが、
それを「C言語の限界」と言うやつはいないだろう。だけどシェルスクリプトだと
それをシェルスクリプトの限界だと言う。単に自分の力の限界なだけなのにな。
シェルスクリプトでプログラミングしないなら
「POSIXコマンドプログラミング」って改名したほうが良いと思う
awkプログラミングでもいいけどなw
シェル(CLIから実行するもの)とシェルスクリプト(.shファイルにまとめたもの)と
厳密に区別してるならいいけど、実際にはシェルスクリプトの中でシェル芸してるんだよなw
例えばRubyなんかでも外部コマンドを呼び出せるわけでRubyのなかでシェル芸もできる。
これをRubyコードと呼べるかというと疑問がでるだろう?それと同じ。
>>763
> 目的が解決できれば解決策は簡単な方がいい
という条件からすると、Rubyのなかでシェル芸するのが正解なパターンは結構多いと思う。
でもやらないことの方が多いだろう。理由はなんだろうか?処理速度かな?
その理由と同じものが、シェルスクリプトにも当てはまると思う。
つまり(Rubyの場合と同様に)シェルスクリプトの中でシェル芸すんな(笑)
> シェルスクリプトだと処理の限界もあらかじめ分かっているというおまけつき
一行では書けなくても、数行書けば実現できることも多い。
シェル芸しかできないから、一行で書けなければムリと諦めてる奴が多い。
たとえばRubyだと1行でできることが、C言語だと数行かかることは多いが、
それを「C言語の限界」と言うやつはいないだろう。だけどシェルスクリプトだと
それをシェルスクリプトの限界だと言う。単に自分の力の限界なだけなのにな。
766デフォルトの名無しさん
2020/03/04(水) 16:11:16.83ID:nkrxx/zT767デフォルトの名無しさん
2020/03/04(水) 16:14:02.93ID:yiNVycVp ロジックが整理されておらず
バグが多数潜んでるシェルスクリプトかのような長文
言語が考え方に影響を与えることが分かるいい例だな
バグが多数潜んでるシェルスクリプトかのような長文
言語が考え方に影響を与えることが分かるいい例だな
768デフォルトの名無しさん
2020/03/04(水) 16:37:48.08ID:Tzh2DSUj769デフォルトの名無しさん
2020/03/04(水) 18:50:02.63ID:RW1/oxrb いちゃもんつける(自分のストレス発散)のが目的なもんだから
段落ごとの方向性がバラバラでつながりが無い/意味不明な文章
段落ごとの方向性がバラバラでつながりが無い/意味不明な文章
770デフォルトの名無しさん
2020/03/04(水) 19:11:58.65ID:Tzh2DSUj というレスはイチャモン以外の何物でもないけどなw
771デフォルトの名無しさん
2020/03/04(水) 23:41:25.17ID:ito9Fws2772デフォルトの名無しさん
2020/03/04(水) 23:48:29.11ID:NdgTFoKb >>771
PATHから探したいんじゃないぞ
PATHから探したいんじゃないぞ
773756
2020/03/05(木) 00:24:52.81ID:PBcHTAfh >>756
に書いてある
つまり、カレントディレクトリからの相対パスではなく、
このファイルからの相対パスになる
だから、このファイルがあるディレクトリの絶対パスを求めて、
それに相対パスを加えるとよい
に書いてある
つまり、カレントディレクトリからの相対パスではなく、
このファイルからの相対パスになる
だから、このファイルがあるディレクトリの絶対パスを求めて、
それに相対パスを加えるとよい
774デフォルトの名無しさん
2020/03/05(木) 00:25:52.24ID:npHipiyQ >>773
絶対パスってどういう意味で言ってる?
絶対パスってどういう意味で言ってる?
775デフォルトの名無しさん
2020/03/05(木) 01:35:06.58ID:HPS3pF1O >>758に納得してしまう
776756
2020/03/05(木) 04:40:53.09ID:PBcHTAfh >>756
に書いてあるけど、例えば、Ruby では、
script.rb に、スクリプトを書いてるとき、
p __FILE__
p __dir__
出力
"c:/Users/Owner/Documents/test/script.rb"
"c:/Users/Owner/Documents/test"
__FILE__ は、このファイルの絶対パス、
__dir__ は、このファイルがあるディレクトリの絶対パスを表す
だから、このファイルから見て、相対パス、./file なら、
__dir__ + "/file"
つまり、c:/Users/Owner/Documents/test/file
に書いてあるけど、例えば、Ruby では、
script.rb に、スクリプトを書いてるとき、
p __FILE__
p __dir__
出力
"c:/Users/Owner/Documents/test/script.rb"
"c:/Users/Owner/Documents/test"
__FILE__ は、このファイルの絶対パス、
__dir__ は、このファイルがあるディレクトリの絶対パスを表す
だから、このファイルから見て、相対パス、./file なら、
__dir__ + "/file"
つまり、c:/Users/Owner/Documents/test/file
777デフォルトの名無しさん
2020/03/05(木) 07:57:16.42ID:GG3NZ1nL ただのガイキチか
778デフォルトの名無しさん
2020/03/06(金) 15:44:20.26ID:el16gBAN Rubyの人に質問するけど
Rubyでは引数処理に便利な機能って標準で提供されてるの?
Rubyでは引数処理に便利な機能って標準で提供されてるの?
779デフォルトの名無しさん
2020/03/06(金) 16:18:48.95ID:dB1opsgL すでに書かれてるだろ。自演か?w
興味あるならあれが標準かとか具体的なのは自分で調べろよ、もしくはRubyスレでだな
興味あるならあれが標準かとか具体的なのは自分で調べろよ、もしくはRubyスレでだな
780デフォルトの名無しさん
2020/03/06(金) 23:22:42.71ID:VrRz91DJ >>779
Rubyのヒトは会話を装う自演なんて高等なことはできないぞw
Rubyのヒトは会話を装う自演なんて高等なことはできないぞw
781デフォルトの名無しさん
2020/03/06(金) 23:52:31.10ID:uvQVOrPP ようやくbashに慣れてきたけど最低限覚えとけって言語はなんだろうか
頻繁に使うのはsed・awk・grep程度なんでやるならperlの方がいいのかね
今後のためにpythonをと言われても素人に使う機会ないわ
頻繁に使うのはsed・awk・grep程度なんでやるならperlの方がいいのかね
今後のためにpythonをと言われても素人に使う機会ないわ
782デフォルトの名無しさん
2020/03/06(金) 23:59:29.67ID:dfpAZ0dm783デフォルトの名無しさん
2020/03/07(土) 00:00:23.26ID:z518jRtl >>778
ARGV, ARGFが組み込み、OptionParserが標準添付ライブラリで提供されてる
ARGVは配列に引数が入ってるやつでだいだいどの言語にもあるやつ
ARGV[0]が実行コマンドじゃなく1つ目の引数になってるのが微妙に使いやすい
ARGFは引数でファイル名を受け取る場合と
標準入力でファイルを受け取る場合を1つの処理で書ける便利なやつ
Ruby以外では見たことない
OptionParserはショートオプション/ロングオプション/サブコマンドとかをサポートしてて
getoptやgetoptsに比べれば書きやすいし便利ではある
ただもっと高機能なgemもあるので依存性とのトレードオフでライブラリを選ぶ感じ
総じて簡単には書けるんだけどPerlなんかに比べるとインタプリタの起動が超遅いから
コマンド叩いてから処理が終わるまでの時間が比較的長い場合にしか使わない
ARGV, ARGFが組み込み、OptionParserが標準添付ライブラリで提供されてる
ARGVは配列に引数が入ってるやつでだいだいどの言語にもあるやつ
ARGV[0]が実行コマンドじゃなく1つ目の引数になってるのが微妙に使いやすい
ARGFは引数でファイル名を受け取る場合と
標準入力でファイルを受け取る場合を1つの処理で書ける便利なやつ
Ruby以外では見たことない
OptionParserはショートオプション/ロングオプション/サブコマンドとかをサポートしてて
getoptやgetoptsに比べれば書きやすいし便利ではある
ただもっと高機能なgemもあるので依存性とのトレードオフでライブラリを選ぶ感じ
総じて簡単には書けるんだけどPerlなんかに比べるとインタプリタの起動が超遅いから
コマンド叩いてから処理が終わるまでの時間が比較的長い場合にしか使わない
784デフォルトの名無しさん
2020/03/07(土) 10:41:41.36ID:EQxW6/Yc >>780
どうだろう?w
どうだろう?w
785デフォルトの名無しさん
2020/03/07(土) 13:57:14.80ID:wqSODED6 if文でディレクトリの権限を確認するにはどうしたらいいですか?
-wをやってみたのですがうまく動作してくれません。
ファイルにしか使えないのですかね?
-wをやってみたのですがうまく動作してくれません。
ファイルにしか使えないのですかね?
786デフォルトの名無しさん
2020/03/07(土) 19:03:29.05ID:Tac4Jm8B rootだからじゃね?いちおう対象がディレクトリも-wで書き込みの可否は返してるけど
787デフォルトの名無しさん
2020/03/07(土) 22:08:31.10ID:wqSODED6 >>786
動作としては書き込み権限の有無を確認し、無ければ付与するという動作が作りたかったです。
いろいろ調べたところrootだとパーミッションを無視するらしいので、
if [ ! -w ディレクトリ ]
上記の記載をしているスクリプトの実行ユーザがrootの為、全てにおいて書き込み権限があると認識されてしまっていると考えられます。
動作としては書き込み権限の有無を確認し、無ければ付与するという動作が作りたかったです。
いろいろ調べたところrootだとパーミッションを無視するらしいので、
if [ ! -w ディレクトリ ]
上記の記載をしているスクリプトの実行ユーザがrootの為、全てにおいて書き込み権限があると認識されてしまっていると考えられます。
788デフォルトの名無しさん
2020/03/07(土) 23:54:32.58ID:hanAtv/p 「chmod ディレクトリ」で検索!
789デフォルトの名無しさん
2020/03/08(日) 00:08:43.59ID:rfEr1WGY >>788
chmodでディレクトリの権限を000にしても可能でしたが…
chmodでディレクトリの権限を000にしても可能でしたが…
790デフォルトの名無しさん
2020/03/08(日) 00:50:11.68ID:TYqtbVyi パーミッションチェックじゃなくて書き込みができるか?だったはず
791デフォルトの名無しさん
2020/03/08(日) 02:47:35.54ID:rfEr1WGY >>790
そうなのですね。
それであれば、000にしてもrootは書き込み可能だから毎回書き込み権限が付与されないは正しい挙動ですね。
実行ユーザーを一般ユーザーに変えるか、lsの結果にwの文字があるかを判別する処理に変えるが対処法になりそうですね。
そうなのですね。
それであれば、000にしてもrootは書き込み可能だから毎回書き込み権限が付与されないは正しい挙動ですね。
実行ユーザーを一般ユーザーに変えるか、lsの結果にwの文字があるかを判別する処理に変えるが対処法になりそうですね。
792デフォルトの名無しさん
2020/03/08(日) 03:12:50.23ID:P20sq25k >>791
そう、思い出した。ファイルのパーミッションを自分から読み書きできないように変更して
本当に読み書きできないか、-wや-rでチェックするコードを書いたら、rootの場合は
それが上手くいかなかった。だからrootではそのチェックをしないようにした。
そう、思い出した。ファイルのパーミッションを自分から読み書きできないように変更して
本当に読み書きできないか、-wや-rでチェックするコードを書いたら、rootの場合は
それが上手くいかなかった。だからrootではそのチェックをしないようにした。
793デフォルトの名無しさん
2020/03/08(日) 05:16:19.40ID:Xv2JcybJ rootの場合でも対象に書き込めるんだから真っ当な動作だわな
794デフォルトの名無しさん
2020/03/08(日) 12:36:43.71ID:uLLaNXsz rootが「一見書き込めない」ファイルは存在しうるけど
「書き込む許可をどうしても得られない」ファイルはシステムの不具合でもない限り存在しないからね。
じゃなきゃそのファイルを誰が処理するのかって話になる。
UID 0は自分が持ち上げられない岩は作れないのだ。
「書き込む許可をどうしても得られない」ファイルはシステムの不具合でもない限り存在しないからね。
じゃなきゃそのファイルを誰が処理するのかって話になる。
UID 0は自分が持ち上げられない岩は作れないのだ。
795デフォルトの名無しさん
2020/03/08(日) 19:11:47.52ID:RzwfZ5D7 Read onlyでマウントしたのはボリュームはrootでも書き込めないよね。そもそも書き込めないメディアも
あくまでも-wは書き込めるかの判定だから使う側が勘違いしてるだけで判定としてはrootでも全く正常な動き
あくまでも-wは書き込めるかの判定だから使う側が勘違いしてるだけで判定としてはrootでも全く正常な動き
796デフォルトの名無しさん
2020/03/08(日) 19:58:45.91ID:T8rZAzyK cd -Lの-Lってデフォルト?
797デフォルトの名無しさん
2020/03/08(日) 20:25:40.77ID:kizyo8RY デファクトでデフォルト
798デフォルトの名無しさん
2020/03/08(日) 22:45:41.68ID:rfEr1WGY >>795
スクリプトを一般ユーザーで実行した際に書き込み権限があるかを判別するって認識でいいんですかね?
rootだと基本全部書き込めるから、一般ユーザーくらいでしか機能しない処理のような気がします。
スクリプトを一般ユーザーで実行した際に書き込み権限があるかを判別するって認識でいいんですかね?
rootだと基本全部書き込めるから、一般ユーザーくらいでしか機能しない処理のような気がします。
799デフォルトの名無しさん
2020/03/08(日) 23:08:52.65ID:5CM70Uar 単に現在(のユーザで)書き込めるかどうか判別してるにすぎないざね。権限とかは置いておいて。書き込める=書き込める権限と言うのならそうかもしれんが
ちなみに、macOSだとロックというのがあり、ロックするとrootでも書き込めないよう
権限とかではなくて単に書き込めるかどうかだな。Read onlyでrootで書き込めないのもそうだし
権限を調べたいならrootではなくてだろうね。もしくは詳しく権限を調べるとか
ちなみに、macOSだとロックというのがあり、ロックするとrootでも書き込めないよう
権限とかではなくて単に書き込めるかどうかだな。Read onlyでrootで書き込めないのもそうだし
権限を調べたいならrootではなくてだろうね。もしくは詳しく権限を調べるとか
800デフォルトの名無しさん
2020/03/09(月) 01:15:25.69ID:EmgiRGOf >ちなみに、macOSだと〜
macOSというかBSDだな。FreeBSD/OpenBSDにもあった、そして挙動が同じ
macOSというかBSDだな。FreeBSD/OpenBSDにもあった、そして挙動が同じ
801デフォルトの名無しさん
2020/03/09(月) 08:15:32.71ID:nSyyVcXg802デフォルトの名無しさん
2020/03/09(月) 15:04:18.04ID:rWRx//dL PWDってさ、スクリプト実行前に設定されるって思う?
803デフォルトの名無しさん
2020/03/09(月) 15:50:41.07ID:sbrbbxpE されてないシェルなんてあったらそのシェルのバグだろう
804デフォルトの名無しさん
2020/03/09(月) 16:01:54.84ID:sbrbbxpE いや、どいつもこいつも設定しないのか。意外だな
PWD
This variable shall represent an absolute pathname of the current working directory. It shall not contain any filename components of dot or dot-dot. The value is set by the cd utility.
> The value is set by the cd utility.
まんまなのか(?)
PWD
This variable shall represent an absolute pathname of the current working directory. It shall not contain any filename components of dot or dot-dot. The value is set by the cd utility.
> The value is set by the cd utility.
まんまなのか(?)
805デフォルトの名無しさん
2020/03/09(月) 16:26:06.84ID:sbrbbxpE いや、スクリプトファイルの実行時にならされる、-c のコマンド羅列文字列の実行時にはされないかな?
806デフォルトの名無しさん
2020/03/09(月) 18:07:49.62ID:bHKN7jy6 どのシェルも設定されるなーって思ってたらkshはされんかった
export $PWD=aaaってやって
ksh -c 'echo $PWD'したらaaaってでた
export $PWD=aaaってやって
ksh -c 'echo $PWD'したらaaaってでた
807デフォルトの名無しさん
2020/03/09(月) 18:10:56.70ID:bHKN7jy6 -cだけじゃなくてksh a.shってやってもaaaってでたw
最初、echo $PWDの前に確認のためにpwdコマンドやっていて気づかんかった
kshだとpwdやったらPWDも設定されたw
最初、echo $PWDの前に確認のためにpwdコマンドやっていて気づかんかった
kshだとpwdやったらPWDも設定されたw
808デフォルトの名無しさん
2020/03/09(月) 18:14:17.37ID:bHKN7jy6 おぉ? kshだとcd .してもPWDは設定されんかったぞw
流石に別ディレクトリに移動したら設定されるが
流石に別ディレクトリに移動したら設定されるが
809デフォルトの名無しさん
2020/03/09(月) 18:33:20.75ID:6JwbfpR0 しまった。>>804,805は -c で " で括ってた。そりゃあ...すまん
kshも設定されない?(??)
export HOGE=hoge
export PWD=hage
ksh -c 'echo $PWD $HOGE'
ってやったら、(pwdの) hoge かな。バージョン違いかな? うちのは 93u+
kshも設定されない?(??)
export HOGE=hoge
export PWD=hage
ksh -c 'echo $PWD $HOGE'
ってやったら、(pwdの) hoge かな。バージョン違いかな? うちのは 93u+
810デフォルトの名無しさん
2020/03/09(月) 18:39:14.18ID:bHKN7jy6 面白いなw
export PWD=aaaってやって以下のスクリプトを実行したら
echo $PWD # aaa
echo $(echo $PWD) # /home/ore
echo $PWD # /home/ore
ってなった。
どこで設定してるんだよwww
kshは93u+
export PWD=aaaってやって以下のスクリプトを実行したら
echo $PWD # aaa
echo $(echo $PWD) # /home/ore
echo $PWD # /home/ore
ってなった。
どこで設定してるんだよwww
kshは93u+
811デフォルトの名無しさん
2020/03/09(月) 18:40:22.34ID:6JwbfpR0 >>808
どういうテストなのかわからんけど、93u+ ではこんなん
$ cd /home
$ echo $PWD
/home
$ PWD=hoge
$ echo $PWD
hoge
$ pwd
/home
$ echo $PWD
hoge
$ cd .
$ echo $PWD
/home
どういうテストなのかわからんけど、93u+ ではこんなん
$ cd /home
$ echo $PWD
/home
$ PWD=hoge
$ echo $PWD
hoge
$ pwd
/home
$ echo $PWD
hoge
$ cd .
$ echo $PWD
/home
812デフォルトの名無しさん
2020/03/09(月) 18:40:35.23ID:bHKN7jy6 echo実行後にせってされてるのでは?と思う人のために
echo $PWD # aaa
echo $PWD # aaa
echo $(echo $PWD) # /home/ore
echo $PWD # /home/ore
echo $PWD # aaa
echo $PWD # aaa
echo $(echo $PWD) # /home/ore
echo $PWD # /home/ore
813デフォルトの名無しさん
2020/03/09(月) 18:41:47.16ID:6JwbfpR0 >>810
同じか。ナゾだなw
同じか。ナゾだなw
814デフォルトの名無しさん
2020/03/09(月) 18:42:40.76ID:bHKN7jy6815デフォルトの名無しさん
2020/03/09(月) 18:45:40.99ID:bHKN7jy6 echo $PWD # aaa
:
echo $PWD # aaa
-----
echo $PWD # aaa
$()
echo $PWD # aaa
-----
echo $PWD # aaa
$(:)
echo $PWD # /home/ore
サブシェルに入ってから?なんか実行すると設定されるっぽいw
:
echo $PWD # aaa
-----
echo $PWD # aaa
$()
echo $PWD # aaa
-----
echo $PWD # aaa
$(:)
echo $PWD # /home/ore
サブシェルに入ってから?なんか実行すると設定されるっぽいw
816デフォルトの名無しさん
2020/03/09(月) 18:46:18.77ID:6JwbfpR0 $ ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD'
でも、
hoge
/home
かな
でも、
hoge
/home
かな
817デフォルトの名無しさん
2020/03/09(月) 18:48:20.68ID:bHKN7jy6 つまりkshで安全に$PWDを使うためには
最初の方で$(:)を実行しておけってことだなw
これが最速の方法か知らんけど、pwd > /dev/null よりかは速そう。いやどっちだろ?
最初の方で$(:)を実行しておけってことだなw
これが最速の方法か知らんけど、pwd > /dev/null よりかは速そう。いやどっちだろ?
818デフォルトの名無しさん
2020/03/09(月) 18:50:28.04ID:bHKN7jy6 bashでログインして、cd /homeして
ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD' を実行すると
hoge
/home
ってでる
export PWD=hoge
ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD' を実行すると
hoge
hoge
ってでる
ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD' を実行すると
hoge
/home
ってでる
export PWD=hoge
ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD' を実行すると
hoge
hoge
ってでる
819デフォルトの名無しさん
2020/03/09(月) 18:51:54.13ID:bHKN7jy6 ははは、ワロスワロス。どうなってるのか考えたら、頭がこんがらがってきたw
820デフォルトの名無しさん
2020/03/09(月) 18:55:32.91ID:6JwbfpR0 なるほど
PWDがexportされていたかに影響するのか、イミフだな
exportされてるされてないで、pwdでのPWDも動作違う(?)
PWDがexportされていたかに影響するのか、イミフだな
exportされてるされてないで、pwdでのPWDも動作違う(?)
821デフォルトの名無しさん
2020/03/09(月) 19:04:32.47ID:bHKN7jy6 PWDはデフォルトでexportされてるはずだから
cd /home
PWD=hoge
ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD'
これも
hoge
hoge
cd /home
PWD=hoge
ksh -c 'PWD=hoge;echo $PWD;cd .;echo $PWD'
これも
hoge
hoge
822デフォルトの名無しさん
2020/03/09(月) 19:05:54.23ID:bHKN7jy6 ムリw バグっぽいけど、どういうバグなのか頭が働かないw
823デフォルトの名無しさん
2020/03/09(月) 19:11:00.02ID:bHKN7jy6 スクリプトの中から
さらにksh -c 'echo $PWD'してもPWDはaaaのままだたけど
(echo $PWD)するだけで/homeになるな。
つまりサブシェルを使うと、サブシェルの外のPWDの状態が変化する
さらにksh -c 'echo $PWD'してもPWDはaaaのままだたけど
(echo $PWD)するだけで/homeになるな。
つまりサブシェルを使うと、サブシェルの外のPWDの状態が変化する
824デフォルトの名無しさん
2020/03/09(月) 19:20:17.23ID:6JwbfpR0 うむ、PWDをイジるとね
>>809のも
export HOGE=hoge
export PWD=hage
ksh -c 'echo $PWD $HOGE'
を
ログインして(シェルはbash)すぐ実行だと、
/home/ore hage
ログインして(bash)、cd /home した後だと、
hage hoge
だな。まずイミフ。PWDなんてイジらない(そもそもkshを好んで使わないwそういういOSがあるらしいが知らんw)から忘れようw
>>809のも
export HOGE=hoge
export PWD=hage
ksh -c 'echo $PWD $HOGE'
を
ログインして(シェルはbash)すぐ実行だと、
/home/ore hage
ログインして(bash)、cd /home した後だと、
hage hoge
だな。まずイミフ。PWDなんてイジらない(そもそもkshを好んで使わないwそういういOSがあるらしいが知らんw)から忘れようw
825デフォルトの名無しさん
2020/03/10(火) 00:15:26.42ID:oWfapBN9 files="/Users/aaa/Documents/*"
for filepath in $files;
do
case $filepath in *.txt)
echo $filepath
esac
done
このcaseをifに置き換えた場合がうまくできません
ご指導よろしくお願いします
for filepath in $files;
do
case $filepath in *.txt)
echo $filepath
esac
done
このcaseをifに置き換えた場合がうまくできません
ご指導よろしくお願いします
826デフォルトの名無しさん
2020/03/10(火) 00:18:49.52ID:Cf5scsdy forからやり直して下さい
827デフォルトの名無しさん
2020/03/10(火) 00:20:14.51ID:QrvPekFm caseでいいやん?なんでifに置き換えるのさ。意味ない。
828デフォルトの名無しさん
2020/03/10(火) 06:34:25.94ID:fD+LS7Hr 単に拡張子を判断したいってだけじゃね。それも txt 一つだけとか。だとしたら、
if [ "${filepath##*.}" = "txt" ]; then
echo "$filepath"
fi
とかにしたくなるのもわからないでもない
if [ "${filepath##*.}" = "txt" ]; then
echo "$filepath"
fi
とかにしたくなるのもわからないでもない
829デフォルトの名無しさん
2020/03/10(火) 08:08:24.53ID:oWfapBN9830デフォルトの名無しさん
2020/03/10(火) 10:13:09.27ID:KDNpqv0e >>828
なんでそんなにifにこだわるんだろうかね
if [ "${filepath##*.}" = "txt" ]; then
case $filepath in *.txt)
if [[ $filepath = *.txt ]]; then
どれがシンプルかは比べてみれば明らかだろうに
caseはcase一つで実現しているが、ifは別途 [ または [[ を
組み合わせてるから無駄な処理を行ってるんだが
文字数も長いし、[[はbash依存
パターンマッチングをcaseからifに置き換えても
文字を長くして無駄な処理を行って動くシェルを減らしているだけで
メリットが一つもない
なんでそんなにifにこだわるんだろうかね
if [ "${filepath##*.}" = "txt" ]; then
case $filepath in *.txt)
if [[ $filepath = *.txt ]]; then
どれがシンプルかは比べてみれば明らかだろうに
caseはcase一つで実現しているが、ifは別途 [ または [[ を
組み合わせてるから無駄な処理を行ってるんだが
文字数も長いし、[[はbash依存
パターンマッチングをcaseからifに置き換えても
文字を長くして無駄な処理を行って動くシェルを減らしているだけで
メリットが一つもない
831デフォルトの名無しさん
2020/03/10(火) 16:38:10.67ID:HVuW4BfF 一つだけなのにcaseを使うのが気持ち悪い、判断パターンをcaseの後に書くのが気持ち悪いという感性の問題だな
どの感性が良い悪いというのではく。コーディング規約が一つにならないのと同じような
お前は俺のコーディング規約が絶対と言って譲らないのと同じ
どの感性が良い悪いというのではく。コーディング規約が一つにならないのと同じような
お前は俺のコーディング規約が絶対と言って譲らないのと同じ
832デフォルトの名無しさん
2020/03/10(火) 22:41:26.01ID:DGocRqod コーディング規約と漠然にいってるけどその内容には二種類あって、
一つは「理由がある良いやり方」と
もう一つは「どちらでも良いけど統一しましょう」というだけのもの
理由があるものはどちらが良いか明確に言うことができる。
明確に言えないものはインデントのスペースを2にするか4にするかという
統一だけするもの。コーディング規約にはこの二つが混じっているから、
良いか悪いかの話ができるものまで、好みの話だと勘違いしてる。
感性が邪魔して良い方法を採用することが出来ないという気持ちはわかるが
今回は明らかにcaseを使ったほうが良い。他にifの方がいい理由があれば
トレードオフの話に持っていけるが
一つは「理由がある良いやり方」と
もう一つは「どちらでも良いけど統一しましょう」というだけのもの
理由があるものはどちらが良いか明確に言うことができる。
明確に言えないものはインデントのスペースを2にするか4にするかという
統一だけするもの。コーディング規約にはこの二つが混じっているから、
良いか悪いかの話ができるものまで、好みの話だと勘違いしてる。
感性が邪魔して良い方法を採用することが出来ないという気持ちはわかるが
今回は明らかにcaseを使ったほうが良い。他にifの方がいい理由があれば
トレードオフの話に持っていけるが
833デフォルトの名無しさん
2020/03/11(水) 02:59:38.62ID:nI7VA1ob しつこい
834デフォルトの名無しさん
2020/03/11(水) 03:56:24.84ID:arwb9WsV 俺様が決めたコーディング規約に従えねぇってかごるぁ
ということを言いたいんだろうな。caseは正義なんだと。
ということを言いたいんだろうな。caseは正義なんだと。
835デフォルトの名無しさん
2020/03/11(水) 04:45:38.32ID:ZeFz9OTM 承認欲求のひとつだろな
836デフォルトの名無しさん
2020/03/11(水) 09:22:15.60ID:FWSDJbu9 >>834
コーディング規約の話なんかしてないだろ?
この場合は、caseの方が優れてるのに
ifを使いたいという"感性"を持ち出してきたアホが居るだけ
そのアホがコーディング規約がーとか意味不明なことを言ってるだけ
コーディング規約の話なんかしてないだろ?
この場合は、caseの方が優れてるのに
ifを使いたいという"感性"を持ち出してきたアホが居るだけ
そのアホがコーディング規約がーとか意味不明なことを言ってるだけ
837デフォルトの名無しさん
2020/03/11(水) 09:32:31.50ID:FWSDJbu9 この場合はcaseが優れてるね
↓
case使えって言った!こいつどんなときでもcase使えって言った!
理由はコーディング規約だからそれに従えだって!
誰もそんなこと言ってないんだよなぁ(笑)
なんで優れてるかどうかの話をすり替えたんだろうね
↓
case使えって言った!こいつどんなときでもcase使えって言った!
理由はコーディング規約だからそれに従えだって!
誰もそんなこと言ってないんだよなぁ(笑)
なんで優れてるかどうかの話をすり替えたんだろうね
838デフォルトの名無しさん
2020/03/11(水) 09:35:24.46ID:arwb9WsV839デフォルトの名無しさん
2020/03/11(水) 10:04:34.79ID:FWSDJbu9 >>838
自分がしつこいから、レスが来てるって思わない?w
自分がしつこいから、レスが来てるって思わない?w
840デフォルトの名無しさん
2020/03/11(水) 10:35:05.80ID:9AoZOnAU >>829を読むとcaseもifも使わないでシンプルに出来たと言っていて、本人はifになんか全然拘っていないんだよな。何故か勝手にしつこく敵視してる笑。
841デフォルトの名無しさん
2020/03/11(水) 10:40:57.60ID:FWSDJbu9 敵視してるのは>>831だぞw
842デフォルトの名無しさん
2020/03/11(水) 15:58:19.41ID:6PQL09wH これがアスベというのだな
843デフォルトの名無しさん
2020/03/11(水) 18:51:36.11ID:6kL2fYSe 無駄なcat的な何か
844デフォルトの名無しさん
2020/03/14(土) 09:40:09.35ID:H7XbSJpX 知らんかったけど、こんな書き方できるんやな
cat << HERE |
abc
HERE
sed s/a/b/g
cat <<HERE &&
abc
HERE
echo abc
謎な書き方多すぎw
cat << HERE |
abc
HERE
sed s/a/b/g
cat <<HERE &&
abc
HERE
echo abc
謎な書き方多すぎw
845デフォルトの名無しさん
2020/03/14(土) 09:44:21.77ID:H7XbSJpX cat <<HERE && cat<<HERE
aaa
HERE
bbb
HERE
わろたw
これも動くんだ
aaa
HERE
bbb
HERE
わろたw
これも動くんだ
846デフォルトの名無しさん
2020/03/14(土) 11:50:07.06ID:9+oeBXql zshだとOKだけどbashだけど文法エラーになるものってあるかな?
例えばbashだとOKだけど、shでは文法エラーになるものに配列がある。
$ bash -cn 'a=()'
$ sh -cn 'a=()'
sh: 1: Syntax error: "(" unexpected
これのzsh版
例えばbashだとOKだけど、shでは文法エラーになるものに配列がある。
$ bash -cn 'a=()'
$ sh -cn 'a=()'
sh: 1: Syntax error: "(" unexpected
これのzsh版
847デフォルトの名無しさん
2020/03/14(土) 11:52:32.93ID:9+oeBXql ただしこれは除く
$ bash -cn 'foo() :'
bash: -c: 行 0: 予期しないトークン `:' 周辺に構文エラーがあります
bash: -c: 行 0: `foo() :'
これはshでは通る。POSIX準拠の構文なはず。だけどbashが通らない珍しい例
$ sh -cn 'foo() :'
$ bash -cn 'foo() :'
bash: -c: 行 0: 予期しないトークン `:' 周辺に構文エラーがあります
bash: -c: 行 0: `foo() :'
これはshでは通る。POSIX準拠の構文なはず。だけどbashが通らない珍しい例
$ sh -cn 'foo() :'
848デフォルトの名無しさん
2020/03/14(土) 15:19:53.15ID:4q4RZYWz 環境はMac mojave、lsとecho $(ls)とで挙動が違うのってなんででしょうか
前者はスペースや改行がしっかりされてるんですが後者は整形されませんでした
前者はスペースや改行がしっかりされてるんですが後者は整形されませんでした
849デフォルトの名無しさん
2020/03/14(土) 15:51:10.82ID:ILPzjwAA lsは出力先によってオプションを指定しない場合のdefault formatが変わる
そういう仕様
そういう仕様
850デフォルトの名無しさん
2020/03/14(土) 16:50:55.95ID:cW1wo+Y7 >>848
echoなんぞに引数で渡す場合は、引数として渡すために分割されてるからじゃね。逆に整形されてるとも言える
echo "$(ls)"
(IFS=''; echo $(ls))
だと同じくならなくね?
echoなんぞに引数で渡す場合は、引数として渡すために分割されてるからじゃね。逆に整形されてるとも言える
echo "$(ls)"
(IFS=''; echo $(ls))
だと同じくならなくね?
851デフォルトの名無しさん
2020/03/14(土) 17:16:06.25ID:aw8SOrjK852デフォルトの名無しさん
2020/03/14(土) 17:30:36.50ID:ILPzjwAA $ echo "$(export COLUMNS=159; export CLICOLOR_FORCE=1; ls -C)"
これでlsだけの時と同じ出力になった
これでlsだけの時と同じ出力になった
853デフォルトの名無しさん
2020/03/14(土) 17:34:32.34ID:aw8SOrjK それは一つの引数の中に改行があるからな
別の問題として最後に複数の改行があっても一つにまとまるから
厳密には同じではない
別の問題として最後に複数の改行があっても一つにまとまるから
厳密には同じではない
854デフォルトの名無しさん
2020/03/14(土) 17:48:52.56ID:Qg6b8RMl なにいってるの
855デフォルトの名無しさん
2020/03/14(土) 17:52:54.94ID:aw8SOrjK 正しいことを言ってる
856デフォルトの名無しさん
2020/03/14(土) 17:55:17.78ID:Qg6b8RMl 変わったやつなのはわかった
857デフォルトの名無しさん
2020/03/14(土) 17:56:25.94ID:aw8SOrjK 教えてほしいなら、何を教えればいいか具体的に言おうねw
質問者のくせに
質問者のくせに
858デフォルトの名無しさん
2020/03/14(土) 17:58:01.23ID:Qg6b8RMl おかしなやつだったか
859デフォルトの名無しさん
2020/03/14(土) 18:01:56.55ID:aw8SOrjK まーた始まった
860デフォルトの名無しさん
2020/03/14(土) 18:20:00.64ID:tUDMKnWI お前がな
861デフォルトの名無しさん
2020/03/14(土) 21:45:32.98ID:fgvgQcum >>844
その仕様は Perl にも受け継がれてるよ。
その仕様は Perl にも受け継がれてるよ。
862デフォルトの名無しさん
2020/03/14(土) 23:56:32.86ID:9VuyfYoc echo は、連続した空白を、1つにまとめる
863デフォルトの名無しさん
2020/03/15(日) 00:05:16.78