シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
探検
シェルスクリプト総合 その32
■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
735デフォルトの名無しさん
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は正義なんだと。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 【ネット民のツッコミ】立憲・野田代表の「事実上の撤回」発言がトレンド、「高市さんそんな事は言ってない」「流石に無理あるだろw」 [1ゲットロボ★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★5 [Ailuropoda melanoleuca★]
- 国分太一 騒動で「数日間の間で全てを失った」 涙ながらに率直な心境吐露 [Anonymous★]
- 死にたい
- まったりまったりおじゃる丸待機スレ🏡
- どうしたらおまえが苦しむか、人生を踏み躙れるか
- 菅田将暉ってイケメンか?
- 中国外務省「全く不十分だ。ごまかすような手口を使うべきではない」高市答弁を批判 [834922174]
- 今日からPython勉強する
