シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その32
https://mevius.5ch.net/test/read.cgi/tech/1571929725/
探検
シェルスクリプト総合 その33
■ このスレッドは過去ログ倉庫に格納されています
2020/03/23(月) 01:12:30.31ID:TYte82vJ
161デフォルトの名無しさん
2020/04/16(木) 19:28:03.58ID:pf1fo5EI あと環境汚すようなときにも使うな。
関数定義してなにかしたいけど、後で消したいとか
まあサブシェルとかでもいいんだけど
関数定義してなにかしたいけど、後で消したいとか
まあサブシェルとかでもいいんだけど
162デフォルトの名無しさん
2020/04/16(木) 19:39:39.35ID:MiKwJnZu >>158
なるほどー。素晴らしい。
なるほどー。素晴らしい。
163デフォルトの名無しさん
2020/04/16(木) 21:47:35.66ID:phPWx1q3 >>159
interactive shellじゃない場合は
`shopt -s expand_aliases; source <alias設定file>` でエイリアスが展開される
$ cat .alias_and_fn
alias ll='ls -tAhG'
foo() {
echo "foobar!!"
}
$ cat input.txt | xargs -I {} bash -O expand_aliases -c $'source .alias_and_fn;¥n ll {}; foo'
行単位で読み込むときにalias展開するからaliasを設定した後に改行入れてから使う
interactiveなログインシェルとして起動したければ`bash -cli`とか
詳しくはman bashで
interactive shellじゃない場合は
`shopt -s expand_aliases; source <alias設定file>` でエイリアスが展開される
$ cat .alias_and_fn
alias ll='ls -tAhG'
foo() {
echo "foobar!!"
}
$ cat input.txt | xargs -I {} bash -O expand_aliases -c $'source .alias_and_fn;¥n ll {}; foo'
行単位で読み込むときにalias展開するからaliasを設定した後に改行入れてから使う
interactiveなログインシェルとして起動したければ`bash -cli`とか
詳しくはman bashで
164デフォルトの名無しさん
2020/04/16(木) 22:37:57.81ID:tywb42E3 bash -c は、よく見る
16556
2020/04/17(金) 06:27:50.85ID:wSTFfL+S >>56
ようやく、分かりますた!
xxx="$(command -v rbenv)"
と、端末で直接実行すると、xxx は、rbenv となって、パスが付かないのは、
すでに、rbenv という関数が定義されたファイルを読み込んでいるため、
同名のコマンドよりも先に、関数が見つかるから
一方、xxx="$(command -v rbenv)"
と、bash スクリプト内に書いて、スクリプトを実行すると、
xxx は、~/.rbenv/bin/rbenv とパスが付くのは、
rbenv という関数が定義されたファイルを読み込んでいないため、コマンドが見つかるから
シェル関数を使うには、その関数が定義されたファイルを読み込んでから使うのか
ようやく、分かりますた!
xxx="$(command -v rbenv)"
と、端末で直接実行すると、xxx は、rbenv となって、パスが付かないのは、
すでに、rbenv という関数が定義されたファイルを読み込んでいるため、
同名のコマンドよりも先に、関数が見つかるから
一方、xxx="$(command -v rbenv)"
と、bash スクリプト内に書いて、スクリプトを実行すると、
xxx は、~/.rbenv/bin/rbenv とパスが付くのは、
rbenv という関数が定義されたファイルを読み込んでいないため、コマンドが見つかるから
シェル関数を使うには、その関数が定義されたファイルを読み込んでから使うのか
166デフォルトの名無しさん
2020/04/17(金) 06:41:06.63ID:BxfxWji9 Ubuntuでシステムのシェルってdashになってるみたいですけど、確かこれってbashより
速いからって理由でしたっけ?
実際どのぐらい違うか興味があるんですが、どこかにdashとbashのベンチマーク比較した
情報とかあります? (自分でやれって? w)
速いからって理由でしたっけ?
実際どのぐらい違うか興味があるんですが、どこかにdashとbashのベンチマーク比較した
情報とかあります? (自分でやれって? w)
167デフォルトの名無しさん
2020/04/17(金) 10:38:11.77ID:9nBzfuh2168デフォルトの名無しさん
2020/04/17(金) 10:44:00.48ID:9nBzfuh2 dashを選んでるのは速度もあるしPOSIX準拠ってのもあるだろうね
169デフォルトの名無しさん
2020/04/17(金) 14:54:31.55ID:Urb0mH6b 関数を一行で書く時エラーで悩んでたけど波括弧ってに空白いるのな
foo(){ echo foo;}
小括弧だと必要ないのに何この初見殺し
foo(){ echo foo;}
小括弧だと必要ないのに何この初見殺し
170デフォルトの名無しさん
2020/04/17(金) 15:09:03.88ID:xgpGiYXu >>169
shellcheck使うといいよ
shellcheck使うといいよ
171デフォルトの名無しさん
2020/04/17(金) 15:40:41.15ID:9nBzfuh2 >>169
zshは空白無くても動く
zsh -c 'foo(){echo test;};foo
test
dashはコンパイルエラー起こらないと思いつつ、実行するとエラーになり
dash -c 'foo(){echo test;}' # コンパイルエラー起こらない
dash -c 'foo(){echo test;};foo' # でも実行すると怒られる
実は"最後の" ; がおかしい
dash -c 'foo(){echo test;} foo' # これを実行するとこうなる
{echo: not found
エラー内容から、最初の { がおかしい事がわかる。これが正解
dash -c 'foo()echo test;} foo'
test
後ろの } はただのノイズだと思われるので、とってあげても動く
dash -c 'foo()echo test; foo'
↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
でもbashやyashでは動かない
そこから考えると
dash -c 'foo()echo test;foo' は動くということがわかるし、
dash -c 'foo()echo test;}foo' は
foo()echo test +}foo になるので、 }foo: not found と表示されることも理解できる
zshは空白無くても動く
zsh -c 'foo(){echo test;};foo
test
dashはコンパイルエラー起こらないと思いつつ、実行するとエラーになり
dash -c 'foo(){echo test;}' # コンパイルエラー起こらない
dash -c 'foo(){echo test;};foo' # でも実行すると怒られる
実は"最後の" ; がおかしい
dash -c 'foo(){echo test;} foo' # これを実行するとこうなる
{echo: not found
エラー内容から、最初の { がおかしい事がわかる。これが正解
dash -c 'foo()echo test;} foo'
test
後ろの } はただのノイズだと思われるので、とってあげても動く
dash -c 'foo()echo test; foo'
↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
でもbashやyashでは動かない
そこから考えると
dash -c 'foo()echo test;foo' は動くということがわかるし、
dash -c 'foo()echo test;}foo' は
foo()echo test +}foo になるので、 }foo: not found と表示されることも理解できる
172デフォルトの名無しさん
2020/04/17(金) 16:52:28.83ID:nls2b0po >>171
> dash -c 'foo()echo test; foo'
>
> ↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
> でもbashやyashでは動かない
それは bash や yash の方が正解
関数定義の本体は複合コマンド(compound command)のみ
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05
ちなみに yash や posh はこれに関して、bash よりも分りやすいエラーメッセージを吐く:
% yash -c 'f() echo'
yash -c:1: syntax error: a function body must be a compound command
% posh -c 'f() echo'
posh: f: function definition must use compound command
%
> dash -c 'foo()echo test; foo'
>
> ↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
> でもbashやyashでは動かない
それは bash や yash の方が正解
関数定義の本体は複合コマンド(compound command)のみ
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05
ちなみに yash や posh はこれに関して、bash よりも分りやすいエラーメッセージを吐く:
% yash -c 'f() echo'
yash -c:1: syntax error: a function body must be a compound command
% posh -c 'f() echo'
posh: f: function definition must use compound command
%
173デフォルトの名無しさん
2020/04/17(金) 17:38:27.88ID:9nBzfuh2 >>172
compound-command は必ずしもグループ化しろとは書かれてないよ
グループ化はオプション
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04
compound-command は必ずしもグループ化しろとは書かれてないよ
グループ化はオプション
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04
174デフォルトの名無しさん
2020/04/17(金) 19:28:17.38ID:3FstJMua175デフォルトの名無しさん
2020/04/17(金) 19:40:14.03ID:nls2b0po176デフォルトの名無しさん
2020/04/17(金) 19:56:23.51ID:UJSQQO8I え,関数って一行で定義するときは
foo() echo hello;
みたいに波括弧で括る必要ないの?
知らんかった。
foo() echo hello;
みたいに波括弧で括る必要ないの?
知らんかった。
177デフォルトの名無しさん
2020/04/17(金) 19:58:37.78ID:9nBzfuh2 >>175
リンク先見ろ、Grouping Commands って書いてあるだろ
compound-command は
() や {} でグループ化してもいいし、しなくてもいい
単一のコマンドも compound-command
というか、単一のコマンドが compound-command であり
複数のコマンドをまとめる時に Grouping Commands を使う
リンク先見ろ、Grouping Commands って書いてあるだろ
compound-command は
() や {} でグループ化してもいいし、しなくてもいい
単一のコマンドも compound-command
というか、単一のコマンドが compound-command であり
複数のコマンドをまとめる時に Grouping Commands を使う
178デフォルトの名無しさん
2020/04/17(金) 19:59:07.40ID:9nBzfuh2 >>176
本来はね。でもbashで対応してないから事実上諦めるしかない。
本来はね。でもbashで対応してないから事実上諦めるしかない。
179デフォルトの名無しさん
2020/04/17(金) 20:01:55.41ID:9nBzfuh2 >>176
あとグループ化するのに使うのは {} または () なので
foo() { echo hello; } の代わりに
foo() (echo hello) と書いても良い
こっちはbashやyashも対応している。
ただし当然のことながらサブシェルで実行される。
あとグループ化するのに使うのは {} または () なので
foo() { echo hello; } の代わりに
foo() (echo hello) と書いても良い
こっちはbashやyashも対応している。
ただし当然のことながらサブシェルで実行される。
180デフォルトの名無しさん
2020/04/17(金) 20:05:05.86ID:9nBzfuh2 fname ( ) compound-command [io-redirect ...]
の最後からわかるように
foo() { echo hello; } >/dev/null や
foo() (echo hello) >/dev/null とも書ける
もちろん複数行でこのように書いてもいい
関数が出すエラーを全て捨てる場合とかに使える
foo() {
echo hello
} 2>/dev/null
の最後からわかるように
foo() { echo hello; } >/dev/null や
foo() (echo hello) >/dev/null とも書ける
もちろん複数行でこのように書いてもいい
関数が出すエラーを全て捨てる場合とかに使える
foo() {
echo hello
} 2>/dev/null
181デフォルトの名無しさん
2020/04/17(金) 20:07:41.32ID:nls2b0po182デフォルトの名無しさん
2020/04/17(金) 20:13:43.55ID:9nBzfuh2 >>181
なんのために Grouping Commands と別に説明してある思ってる?
Grouping Commands を作るための {} または () が必須じゃないから、
「compound-commands の定義は {} または () で始まる」と*書かれてない*んだよ
なんのために Grouping Commands と別に説明してある思ってる?
Grouping Commands を作るための {} または () が必須じゃないから、
「compound-commands の定義は {} または () で始まる」と*書かれてない*んだよ
183デフォルトの名無しさん
2020/04/17(金) 20:56:24.03ID:xgpGiYXu 2.9.4 Compound Commands
The shell has several programming constructs that are "compound commands", which provide control flow for commands.
Each of these compound commands has a reserved word or control operator at the beginning, and a corresponding terminator reserved word or operator at the end
でその後Compound Commandsとして上げられてるが以下の6つ
- Grouping Commands
- The for Loop
- Case Conditional Construct
- The if Conditional Construct
- The while Loop
- The until Loop
echo helloは開始・終了を示す予約語もなければ、上の6つのどれにも当てはまらないからCompound Commandではない
The shell has several programming constructs that are "compound commands", which provide control flow for commands.
Each of these compound commands has a reserved word or control operator at the beginning, and a corresponding terminator reserved word or operator at the end
でその後Compound Commandsとして上げられてるが以下の6つ
- Grouping Commands
- The for Loop
- Case Conditional Construct
- The if Conditional Construct
- The while Loop
- The until Loop
echo helloは開始・終了を示す予約語もなければ、上の6つのどれにも当てはまらないからCompound Commandではない
184デフォルトの名無しさん
2020/04/17(金) 20:57:55.90ID:xgpGiYXu foo() if true; then echo "foobar"; fi
↑こういうのはOK
↓shellcheckの解説
POSIX allows the body of a function to be any compound command, e.g. foo() for i; do :; done. Since this usage is rare, ShellCheck intentionally requires the body to be { ..; } (or ( ..; )):
https://github.com/koalaman/shellcheck/wiki/SC1064
↑こういうのはOK
↓shellcheckの解説
POSIX allows the body of a function to be any compound command, e.g. foo() for i; do :; done. Since this usage is rare, ShellCheck intentionally requires the body to be { ..; } (or ( ..; )):
https://github.com/koalaman/shellcheck/wiki/SC1064
185デフォルトの名無しさん
2020/04/17(金) 21:06:47.56ID:9nBzfuh2 >>183
Compound Commands はその6つって言いたいの?
なら以下の関数定義はPOSIX 準拠ってことだね
foo() for i in a b c; do echo $i; done
foo() case a in a) echo a; esac
foo() if [ a ]; then echo a; fi
foo() while [ $# -gt 0 ]; do echo $1; shift; done
Compound Commands はその6つって言いたいの?
なら以下の関数定義はPOSIX 準拠ってことだね
foo() for i in a b c; do echo $i; done
foo() case a in a) echo a; esac
foo() if [ a ]; then echo a; fi
foo() while [ $# -gt 0 ]; do echo $1; shift; done
186デフォルトの名無しさん
2020/04/17(金) 22:32:27.89ID:UJSQQO8I <<. dash
foo() echo hello
foo
.
hello
たしかにDashだと問題なく定義できるな……。
こんなこと始めて知ったわ。実地で使うかどうかは置いといてw
foo() echo hello
foo
.
hello
たしかにDashだと問題なく定義できるな……。
こんなこと始めて知ったわ。実地で使うかどうかは置いといてw
要するに素直に括弧でくるんどけってことやな
188デフォルトの名無しさん
2020/04/18(土) 00:16:26.14ID:sxA+eVU/189デフォルトの名無しさん
2020/04/18(土) 00:28:42.97ID:6r7FvQ+k >>169
type { }やると分かるけど{}はシェルの予約語
{}に意味があるから{ この空白も閉じる前の;}もいる
for i inをforiinにできないようなもんで
()はtypeで何も出てこないけどね
type { }やると分かるけど{}はシェルの予約語
{}に意味があるから{ この空白も閉じる前の;}もいる
for i inをforiinにできないようなもんで
()はtypeで何も出てこないけどね
190デフォルトの名無しさん
2020/04/18(土) 13:41:33.88ID:6HUqz/fc set -eの挙動について教えて下さい!
これを実行したら何も表示されずに終了されました
set -e
foo() {
false
echo foo
}
foo
echo $?
その理由はわかります
質問はfooの中身を一切変えずにset -eの状態で
fooを画面に表示させずに $? (= 1) を
取得する方法はあるのでしょうか?
これを実行したら何も表示されずに終了されました
set -e
foo() {
false
echo foo
}
foo
echo $?
その理由はわかります
質問はfooの中身を一切変えずにset -eの状態で
fooを画面に表示させずに $? (= 1) を
取得する方法はあるのでしょうか?
191デフォルトの名無しさん
2020/04/18(土) 13:58:58.99ID:iaqzJhUO { と [ は記号でなく「コマンド」
$ ls -l
を
$ ls-l
とスペースを入れないと動かなくなる
これと一緒
$ ls -l
を
$ ls-l
とスペースを入れないと動かなくなる
これと一緒
192デフォルトの名無しさん
2020/04/18(土) 15:04:41.42ID:uOWDKjxa >>190
! ret=foo
echo $?
or
if ret=$(foo); then
echo "truthy" "$ret" "$?"
else
echo "falsy" "$ret" "$?"
fi
! ret=foo
echo $?
or
if ret=$(foo); then
echo "truthy" "$ret" "$?"
else
echo "falsy" "$ret" "$?"
fi
193デフォルトの名無しさん
2020/04/18(土) 16:16:36.81ID:6HUqz/fc >>192
> ! ret=foo
なんですか、これ!?って思ったらfoo関数呼び出してないじゃないですかぁ
> if ret=$(foo); then
なるほど、これで取得できるんですねって思って
やったんですけど truthy foo 0 ってでました
> ! ret=foo
なんですか、これ!?って思ったらfoo関数呼び出してないじゃないですかぁ
> if ret=$(foo); then
なるほど、これで取得できるんですねって思って
やったんですけど truthy foo 0 ってでました
194デフォルトの名無しさん
2020/04/18(土) 16:53:00.73ID:8o9dGOG1 >>190
パイプライン (1 つの 単純なコマンド からなるものでもよい)、 括弧で囲まれた サブシェル のコマンド、 ブレース (前述の シェルの文法 を参照) で囲まれたコマンドのリストの一部として
実行されたコマンドの 1 つ が 0 でないステータスで終了した場合、即座に終了します
だから。falseの時点でどうであれメインシェルプロセスがそこで終了、echo fooなんて実行しない、もちろん呼び出し元にも戻らない
>>192は上記に続く文に沿ってのじゃないかなあ。だが、if false; then ... とかの話で、違うだろうな文的にも。わざとなのかわからんけどw
そういう動作を望んで set -e してるのにそういう動作すんなって無理じゃね
パイプライン (1 つの 単純なコマンド からなるものでもよい)、 括弧で囲まれた サブシェル のコマンド、 ブレース (前述の シェルの文法 を参照) で囲まれたコマンドのリストの一部として
実行されたコマンドの 1 つ が 0 でないステータスで終了した場合、即座に終了します
だから。falseの時点でどうであれメインシェルプロセスがそこで終了、echo fooなんて実行しない、もちろん呼び出し元にも戻らない
>>192は上記に続く文に沿ってのじゃないかなあ。だが、if false; then ... とかの話で、違うだろうな文的にも。わざとなのかわからんけどw
そういう動作を望んで set -e してるのにそういう動作すんなって無理じゃね
195デフォルトの名無しさん
2020/04/18(土) 17:07:44.49ID:8o9dGOG1 bash 限定なら、
export -f foo
bash -c 'foo' && echo $? || echo $?
で、一応動くようではあるな(ちゃんとfooでのステータス値も返る)
export -f foo
bash -c 'foo' && echo $? || echo $?
で、一応動くようではあるな(ちゃんとfooでのステータス値も返る)
196デフォルトの名無しさん
2020/04/18(土) 17:44:44.40ID:8o9dGOG1197デフォルトの名無しさん
2020/04/18(土) 17:58:24.37ID:8o9dGOG1 あぁ、$() は正常時はやっぱりダメか。そりゃそうだな(スッキリしたw)
ret=$(foo) のような、なんか工夫すればできそうな気もしないでもないが。そういうことなのね、失礼>>192
ret=$(foo) のような、なんか工夫すればできそうな気もしないでもないが。そういうことなのね、失礼>>192
198デフォルトの名無しさん
2020/04/18(土) 18:28:05.36ID:fB7EV6Kq その方針なら
export -f foo;
ret=$(bash -c 'foo; echo $?');
echo $ret;
で良いんじゃね?
export -f foo;
ret=$(bash -c 'foo; echo $?');
echo $ret;
で良いんじゃね?
199デフォルトの名無しさん
2020/04/18(土) 19:01:48.64ID:8o9dGOG1 出力結果をスクリプトで扱うために欲しいわけじゃないから
$() だと関数も外部コマンドのように別(のメイン)プロセスとして呼べる=bash固有のでなくて使えそうだなあという、ニコイチではなくどっちかの話
$() だと関数も外部コマンドのように別(のメイン)プロセスとして呼べる=bash固有のでなくて使えそうだなあという、ニコイチではなくどっちかの話
200デフォルトの名無しさん
2020/04/18(土) 19:14:49.95ID:fB7EV6Kq ああすまん、fooの出力を忘れてた。
201デフォルトの名無しさん
2020/04/18(土) 23:55:48.35ID:L3zGDU5z $ $(echo hoge)
hoge: command not found
まあ、当然そうだわな
$ $(exit 12)
$ echo $?
12
へー、コマンドねえぞとお怒りにはならんのか。空行とみなして無かったこと(?)になるのか
echo ' 'とかスペースタブだけ(?)なら許してくれる、: と違いステータスも変わらない
てことで、標準出力に何も出さなければいいのねで、
exec 9>&1
$(set -e; foo >&9) && echo $? || echo $?
でbash以外でも動くことは動く ($() 内ってCommandsでもいいのね)
$()内での set -e はない方がスッキリだが必要ないシェルもあるもあるが必要とするシェルがある
hoge: command not found
まあ、当然そうだわな
$ $(exit 12)
$ echo $?
12
へー、コマンドねえぞとお怒りにはならんのか。空行とみなして無かったこと(?)になるのか
echo ' 'とかスペースタブだけ(?)なら許してくれる、: と違いステータスも変わらない
てことで、標準出力に何も出さなければいいのねで、
exec 9>&1
$(set -e; foo >&9) && echo $? || echo $?
でbash以外でも動くことは動く ($() 内ってCommandsでもいいのね)
$()内での set -e はない方がスッキリだが必要ないシェルもあるもあるが必要とするシェルがある
202デフォルトの名無しさん
2020/04/19(日) 00:14:03.50ID:u21QryuH 例えば、Ruby のバージョンマネージャー・rbenv の、rbenv-installer の冒頭部分は、
#!/bin/bash
# コマンドの終了コードが、0以外なら強制終了する
set -e
homebrew=
# -p : タイプが「file(実行ファイル)」の時のみ実行ファイルの絶対パスを出力する
# (それ以外のタイプの場合は何も出力しない)
type -p brew >/dev/null && homebrew=1
#!/bin/bash
# コマンドの終了コードが、0以外なら強制終了する
set -e
homebrew=
# -p : タイプが「file(実行ファイル)」の時のみ実行ファイルの絶対パスを出力する
# (それ以外のタイプの場合は何も出力しない)
type -p brew >/dev/null && homebrew=1
203デフォルトの名無しさん
2020/04/21(火) 09:06:14.84ID:h1bS6DJt コマンドってファイルに書くのと実行形式を~/binに置くのとどっちがいいの
関数とエイリアスの違いは分かったけど使い分けできてないな
関数とエイリアスの違いは分かったけど使い分けできてないな
204デフォルトの名無しさん
2020/04/21(火) 10:50:42.27ID:FcWzzI7X /dev/urandomっていうデバイスファイルが,
ほんとにただのファイルとか実は同じ値ばっかり出力するデバイスファイルとか
じゃないってことを保証する方法ってある?
ほんとにただのファイルとか実は同じ値ばっかり出力するデバイスファイルとか
じゃないってことを保証する方法ってある?
205デフォルトの名無しさん
2020/04/21(火) 13:16:25.79ID:bkXsrA+q206デフォルトの名無しさん
2020/04/21(火) 15:24:10.19ID:Lx1iEb8v >>204
ないよ。
作ろうと思えば/dev/urandomを独自実装のデバイスファイルに置き換えられるんだから。
それっぽい値を返すデバイスファイルを作ろうと思えば作れる
例えばWSL1はWindowsでLinuxカーネルをエミュレートしてるんだから
/dev/urandom とかMSの独自実装のデバイスでしょ?
ないよ。
作ろうと思えば/dev/urandomを独自実装のデバイスファイルに置き換えられるんだから。
それっぽい値を返すデバイスファイルを作ろうと思えば作れる
例えばWSL1はWindowsでLinuxカーネルをエミュレートしてるんだから
/dev/urandom とかMSの独自実装のデバイスでしょ?
207デフォルトの名無しさん
2020/04/21(火) 15:27:13.15ID:Lx1iEb8v >>203
コマンドをファイルに書くって関数のこと?
CLIから呼び出す汎用的なものは~/binで
スクリプト内部で使うだけなら関数にするだけじゃないの?
そしてエイリアスはインタラクティブシェルで使うもの
bashがデフォルトでスクリプトでは無効になってるのはそういう事
コマンドをファイルに書くって関数のこと?
CLIから呼び出す汎用的なものは~/binで
スクリプト内部で使うだけなら関数にするだけじゃないの?
そしてエイリアスはインタラクティブシェルで使うもの
bashがデフォルトでスクリプトでは無効になってるのはそういう事
208デフォルトの名無しさん
2020/04/21(火) 16:17:24.29ID:fQ5b9H0O >スクリプト内部で使うだけなら関数にするだけ
と思い込んでたら、>>56みたいになるぞw
>bashがデフォルトでスクリプトでは無効になってるのはそういう事
まあ、4からか?そういう方がいいだろうと思い変えたのだろうが、--posixでは有効なんだけどな
と思い込んでたら、>>56みたいになるぞw
>bashがデフォルトでスクリプトでは無効になってるのはそういう事
まあ、4からか?そういう方がいいだろうと思い変えたのだろうが、--posixでは有効なんだけどな
209デフォルトの名無しさん
2020/04/21(火) 16:29:23.76ID:Lx1iEb8v210デフォルトの名無しさん
2020/04/21(火) 16:30:27.22ID:Lx1iEb8v https://pubs.opengroup.org/onlinepubs/9699919799/utilities/alias.html
POSIXでも interactive utilities.って言われてるぐらいだしな
POSIXでも interactive utilities.って言われてるぐらいだしな
211デフォルトの名無しさん
2020/04/21(火) 16:43:50.04ID:fQ5b9H0O >>209
残念ながら、3はそうなってない
残念ながら、3はそうなってない
212デフォルトの名無しさん
2020/04/21(火) 16:47:30.51ID:fQ5b9H0O >>210
ちゃんと読めよ
ちゃんと読めよ
213デフォルトの名無しさん
2020/04/21(火) 16:59:29.51ID:fQ5b9H0O214デフォルトの名無しさん
2020/04/21(火) 17:43:01.90ID:fQ5b9H0O >>209,211
ああ、すまん
実行できないのは最初からだし、存在さえもしないのは3以降からだな(2では存在はするが実行時エラー)
>まあ、4からか?そういう方がいいだろうと思い変えたのだろうが
の部分は間違い勘違い、すまん
ああ、すまん
実行できないのは最初からだし、存在さえもしないのは3以降からだな(2では存在はするが実行時エラー)
>まあ、4からか?そういう方がいいだろうと思い変えたのだろうが
の部分は間違い勘違い、すまん
215デフォルトの名無しさん
2020/04/21(火) 18:23:13.41ID:Lx1iEb8v21656
2020/04/21(火) 20:51:03.40ID:HADG6GDb anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える。
~/.bashrc に、下の2行を追加するだけで、各言語ごとに追加しないでも良い
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
結局、この追加した、eval で、rbenv という関数を読み込んでいたという落ちw
~/.bashrc に、下の2行を追加するだけで、各言語ごとに追加しないでも良い
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
結局、この追加した、eval で、rbenv という関数を読み込んでいたという落ちw
21756
2020/04/21(火) 20:57:08.31ID:HADG6GDb218デフォルトの名無しさん
2020/04/21(火) 21:30:49.10ID:fQ5b9H0O219デフォルトの名無しさん
2020/04/21(火) 21:50:22.71ID:Lx1iEb8v rbenvはaliasをインタラクティブシェルで使ってない
だからといって、
「aliasはインタラクティブシェルで使うもの」を
否定してることにはならんのだが・
だからといって、
「aliasはインタラクティブシェルで使うもの」を
否定してることにはならんのだが・
220デフォルトの名無しさん
2020/04/21(火) 22:16:38.40ID:fQ5b9H0O 何言ってるの?
>>スクリプト内部で使うだけなら関数にするだけ
>と思い込んでたら、>>56みたいになるぞw
から、想像だけで「alias使ってるんでしょ?」て間違ったこと「いきなり」言い始めたんんだけど。それが関数なんてすぐ下に書いてあるのに、見も/調べもせずに「いきなり」
「スクリプト内部で使う[だけ]なら[関数]」だから、見も/調べもせずに「alias使ってるんでしょ?」なんて間違いを平気で言ったんでしょ?
aliasはインタラクティブシェルで使うものは別件で、そこは関数のことだろに
aliasはインタラクティブシェルで使うものは特に否定はしてないが、POSIXでそう決めてるわけではない。>>210を自分でちゃんと読めば>>210はなんの補強にもなってないのに誤った抽出ってこと
>>スクリプト内部で使うだけなら関数にするだけ
>と思い込んでたら、>>56みたいになるぞw
から、想像だけで「alias使ってるんでしょ?」て間違ったこと「いきなり」言い始めたんんだけど。それが関数なんてすぐ下に書いてあるのに、見も/調べもせずに「いきなり」
「スクリプト内部で使う[だけ]なら[関数]」だから、見も/調べもせずに「alias使ってるんでしょ?」なんて間違いを平気で言ったんでしょ?
aliasはインタラクティブシェルで使うものは別件で、そこは関数のことだろに
aliasはインタラクティブシェルで使うものは特に否定はしてないが、POSIXでそう決めてるわけではない。>>210を自分でちゃんと読めば>>210はなんの補強にもなってないのに誤った抽出ってこと
221デフォルトの名無しさん
2020/04/21(火) 22:19:02.65ID:Lx1iEb8v 「スクリプト内部で使うだけなら関数にするだけ」は
否定しないんだね
否定しないんだね
222デフォルトの名無しさん
2020/04/21(火) 22:21:12.97ID:fQ5b9H0O 読めなさすぎだろう。なんでそうなる??
スクリプト内部で使う[だけ]じゃない[関数]がって例の話なのに
ダメだな読めなさすぎ、今までのでも
スクリプト内部で使う[だけ]じゃない[関数]がって例の話なのに
ダメだな読めなさすぎ、今までのでも
223デフォルトの名無しさん
2020/04/22(水) 05:24:59.12ID:6NXdX+6G お前らいつも質問者を置き去りにしてんな
224デフォルトの名無しさん
2020/04/22(水) 05:43:01.59ID:Beb++bH7 こいつもう辞めた方がいいな
225デフォルトの名無しさん
2020/04/22(水) 11:23:37.41ID:3RYHR+yq 質問箱スレじゃないから
226デフォルトの名無しさん
2020/04/22(水) 16:58:30.97ID:UC4McjLk 枯れた技術のスレで質問禁止にしたら超絶過疎っちゃうよ
227デフォルトの名無しさん
2020/04/22(水) 18:17:22.60ID:hVJ7sunP 質問禁止という意味じゃない。質問もありだし質問のをネタにしたのもあり
質問箱スレならQ/A以外は雑音にしかならんという意味
質問箱スレならQ/A以外は雑音にしかならんという意味
228デフォルトの名無しさん
2020/04/23(木) 02:03:46.11ID:SDkT6EOl cronの書式を読み取りたいんですがなぜかファイル名が読み取られてしまいます。なぜでしょうか?
229デフォルトの名無しさん
2020/04/23(木) 22:30:55.15ID:LOz3K8jb どうやったらそんな挙動になるんだ?
ちょっとどんなコマンド打ったか書いてみて。
ちょっとどんなコマンド打ったか書いてみて。
230デフォルトの名無しさん
2020/04/23(木) 23:01:10.88ID:UKSnHl0c >>228
クォートしてないからでしょ
$ ls
crontab
$ echo * * * * * user-name command to be executed
crontab crontab crontab crontab crontab user-name command to be executed
$ echo "* * * * * user-name command to be executed"
* * * * * user-name command to be executed
クォートしてないからでしょ
$ ls
crontab
$ echo * * * * * user-name command to be executed
crontab crontab crontab crontab crontab user-name command to be executed
$ echo "* * * * * user-name command to be executed"
* * * * * user-name command to be executed
231デフォルトの名無しさん
2020/04/24(金) 00:57:40.18ID:QUI7MWka232デフォルトの名無しさん
2020/04/24(金) 01:55:29.65ID:oLSoKJut awk使っちまうなあ
楽チンで
楽チンで
233デフォルトの名無しさん
2020/04/24(金) 02:13:20.42ID:QUI7MWka その後シェルスクリプトで処理をしたいんです。
234デフォルトの名無しさん
2020/04/24(金) 02:56:11.86ID:F2FblhOM read
235デフォルトの名無しさん
2020/04/24(金) 03:11:08.96ID:F2FblhOM236デフォルトの名無しさん
2020/04/25(土) 23:21:25.07ID:dkVnBOhV 他スレで -z とか見て思い出したんだけどさ
[ -z "$str" ] とか [ -n "$str" ] って必要なの?
[ "$str" ] とか [ ! "$str" ] でいいと思うんだけど?
[ "$op" "$str" ] みたいに演算子を変数に入れられるから
機能そのものが不要だとはは思わないけど
通常は [ "$str" ] や [ ! "$str" ] で良くない?
他の言語だとこっちだからわかりやすいし
[ -z "$str" ] とか [ -n "$str" ] って必要なの?
[ "$str" ] とか [ ! "$str" ] でいいと思うんだけど?
[ "$op" "$str" ] みたいに演算子を変数に入れられるから
機能そのものが不要だとはは思わないけど
通常は [ "$str" ] や [ ! "$str" ] で良くない?
他の言語だとこっちだからわかりやすいし
237デフォルトの名無しさん
2020/04/25(土) 23:31:42.54ID:gS2ps0hn 他の言語だったらそういうのはBooleanでしか使わないという文化な人々も居る
[ -z "$str" ] や [ -n "$str" ] よりも [ "$str" = "" ] とか [ "$str" != "" ] の方が見る機会が多かったな
[ -z "$str" ] や [ -n "$str" ] よりも [ "$str" = "" ] とか [ "$str" != "" ] の方が見る機会が多かったな
238デフォルトの名無しさん
2020/04/25(土) 23:59:47.04ID:Ey2ZfVC3 >>236
先頭にマイナス記号が入らないことが保証されるのならいいのでは?
先頭にマイナス記号が入らないことが保証されるのならいいのでは?
239デフォルトの名無しさん
2020/04/26(日) 00:16:24.29ID:D7tlSM02 >>238
関係ないでしょ? その場合こう展開される
[ "-z" ] または [ "-n" ] これはどちらも文字列があるから0
[ ] で囲まれた中身が1個の場合は決してオペレータとして扱わないのだから
どんな文字が来たとしても問題ない。空文字以外は0となる
ついでにいうと [ ] の中身が0個の場合は常に非0
そもそも [ ] (test)のドキュメントに
STRING は -n STRING と等価と書かれている
仕様通り
関係ないでしょ? その場合こう展開される
[ "-z" ] または [ "-n" ] これはどちらも文字列があるから0
[ ] で囲まれた中身が1個の場合は決してオペレータとして扱わないのだから
どんな文字が来たとしても問題ない。空文字以外は0となる
ついでにいうと [ ] の中身が0個の場合は常に非0
そもそも [ ] (test)のドキュメントに
STRING は -n STRING と等価と書かれている
仕様通り
240デフォルトの名無しさん
2020/04/26(日) 03:16:05.39ID:cVjuSaki >>239
他の条件とand/orされる場合は?
他の条件とand/orされる場合は?
241デフォルトの名無しさん
2020/04/26(日) 03:17:32.99ID:D7tlSM02242デフォルトの名無しさん
2020/04/26(日) 03:29:33.94ID:cVjuSaki243デフォルトの名無しさん
2020/04/26(日) 04:31:48.38ID:D7tlSM02 >>242
ん?でもさ -a とか -o 使っても問題ないんじゃね?
[ str -a ] みたいなのってありえないんだからさ[ -a -a ] もないでしょ?
[ -a -a -a ] だと 最初と最後が文字だって一意に識別できるよね?
訂正する
> 他の条件とand/orされる場合は?
他の条件とand/orされる場合 かつ 混乱するようなパターンってありえるの?
ん?でもさ -a とか -o 使っても問題ないんじゃね?
[ str -a ] みたいなのってありえないんだからさ[ -a -a ] もないでしょ?
[ -a -a -a ] だと 最初と最後が文字だって一意に識別できるよね?
訂正する
> 他の条件とand/orされる場合は?
他の条件とand/orされる場合 かつ 混乱するようなパターンってありえるの?
244デフォルトの名無しさん
2020/04/26(日) 04:38:33.47ID:cVjuSaki >>243
シェルというかtestコマンドってそんなに賢く自動判別してくれるの?
これからそういうシェルまたはtestコマンド作るって話?
だったら作ればいいんじゃね?そうすればそれはそういうものですって言えるしそれでokだ。
シェルというかtestコマンドってそんなに賢く自動判別してくれるの?
これからそういうシェルまたはtestコマンド作るって話?
だったら作ればいいんじゃね?そうすればそれはそういうものですって言えるしそれでokだ。
245デフォルトの名無しさん
2020/04/26(日) 04:48:09.65ID:D7tlSM02 なんでシェルをディスってるの?
これからも何も「testは賢く判断するから問題ないよね」って聞いてるだけなのに
これからも何も「testは賢く判断するから問題ないよね」って聞いてるだけなのに
246デフォルトの名無しさん
2020/04/26(日) 04:53:55.28ID:D7tlSM02247デフォルトの名無しさん
2020/04/26(日) 04:56:34.45ID:cVjuSaki あ、そう。じゃあそれでいいんじゃね?
248デフォルトの名無しさん
2020/04/26(日) 06:08:44.50ID:D7tlSM02 何が気に食わないんだろう(笑)
249デフォルトの名無しさん
2020/04/26(日) 14:42:15.32ID:v6fWLjMY >>236と同一人物に見えて俺流儀の押し付けしたいのか何をしたいのかだろな
250デフォルトの名無しさん
2020/04/26(日) 15:26:53.79ID:D7tlSM02 質問者 (POSIX準拠の仕様)これ問題ある?
回答者 問題あるに決まってるだろ。あれとかこれとかどうなんだ?
質問者 それらは問題ないよね?
回答者 お前の流儀を押し付けるな!
なんだこのながれ
回答者 問題あるに決まってるだろ。あれとかこれとかどうなんだ?
質問者 それらは問題ないよね?
回答者 お前の流儀を押し付けるな!
なんだこのながれ
251デフォルトの名無しさん
2020/04/26(日) 15:35:41.02ID:UR76YMSe /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
252デフォルトの名無しさん
2020/04/26(日) 15:55:10.56ID:D7tlSM02 まともなレスじゃなくて、個人たたきに変わったからな
POSIXの仕様にたいして俺流儀とかアホかと
POSIXの仕様にたいして俺流儀とかアホかと
253デフォルトの名無しさん
2020/04/26(日) 18:41:28.13ID:vc5fDz2w それ以上POSIXを唱えるな
奴が来る
奴が来る
254デフォルトの名無しさん
2020/04/28(火) 06:27:22.31ID:6K6MgdzD ハクション大魔王2020は面白いな。
255デフォルトの名無しさん
2020/04/28(火) 08:02:31.62ID:w59d7UdO 俺流儀に見えたってことはそういうことでは
虚栄心だけじゃ何も学べないよねぇ
虚栄心だけじゃ何も学べないよねぇ
256デフォルトの名無しさん
2020/04/28(火) 08:18:47.52ID:+3UriQww 詠唱
────POSIX準拠
────POSIX準拠
257デフォルトの名無しさん
2020/04/28(火) 13:15:20.29ID:85h3VPXT 宗教みたいだぁ…(直喩)
258デフォルトの名無しさん
2020/04/28(火) 15:22:47.80ID:7mVXavmj 宗教だろ…(直球)
259デフォルトの名無しさん
2020/04/29(水) 07:41:19.70ID:kBxqIvnv お前のログインシェルをfishにしてやろうか
260デフォルトの名無しさん
2020/04/29(水) 13:35:45.09ID:CfLIzb8G >>259
それはPOSIX準拠?
それはPOSIX準拠?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 中共は台湾を自分の領土と思ってるから外国が「侵略するな」と警告しても意味ないんだよね
- ( ´・ω・` )朝ですぞー
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- 高校のうちにガチでセックスできる可能性あったのに逃した俺は負け組
