シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
http://echo.2ch.net/test/read.cgi/unix/1439563321/
探検
シェルスクリプト総合 その26 [無断転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/03/20(月) 12:07:26.41
890名無しさん@お腹いっぱい。
2018/04/28(土) 19:41:21.09 >886-887
ありがとうできたよ。bufが空白になって常にelseに倒れてたから助かりました。
$の位置が良くわからなくて困っていたんだ
Cならいくらでも書けるんだけど、慣れない言語はちょとね・・・
ありがとうできたよ。bufが空白になって常にelseに倒れてたから助かりました。
$の位置が良くわからなくて困っていたんだ
Cならいくらでも書けるんだけど、慣れない言語はちょとね・・・
2018/04/28(土) 20:34:44.86
>>888
timeコマンドの出力は標準エラーだよ。
標準出力の方は乱さない。
標準エラーが乱れる方も
(time sh -c '測りたいコマンド 2>&3' 2>/tmp/time.out ) 3>&2
みたいにすれば回避できるから、素直に time コマンド使う方がいい。
timeコマンドの出力は標準エラーだよ。
標準出力の方は乱さない。
標準エラーが乱れる方も
(time sh -c '測りたいコマンド 2>&3' 2>/tmp/time.out ) 3>&2
みたいにすれば回避できるから、素直に time コマンド使う方がいい。
2018/04/28(土) 23:27:39.64
2018/04/29(日) 00:02:10.75
まあ使えないわけじゃないし候補にはなるけど、
OSごとに処理分けるの嫌だなぁ
OSごとに処理分けるの嫌だなぁ
2018/04/29(日) 00:07:48.59
/bin/timeって明示すれば?
2018/04/29(日) 02:10:30.87
もしくは
command -p time
command -p time
2018/04/29(日) 08:34:10.39
いや、だからtimeコマンドだと
シェル関数扱えないからだめだって言ってるやん?
シェル関数扱えないからだめだって言ってるやん?
2018/04/29(日) 11:24:09.19
放置で
2018/04/29(日) 18:50:59.66
どうぞ
2018/04/30(月) 09:52:20.53
mkfifo便利すぎる
900名無しさん@お腹いっぱい。
2018/04/30(月) 10:17:56.64 シェルスクリプトの入門書を教えてください
ソフトバンクから出てるUNIXシェルスクリプト〜みたいな書名のものがAmazonでは評価高いみたいなんですが…
先輩方のおすすめを教えてください
ソフトバンクから出てるUNIXシェルスクリプト〜みたいな書名のものがAmazonでは評価高いみたいなんですが…
先輩方のおすすめを教えてください
901名無しさん@お腹いっぱい。
2018/04/30(月) 14:27:06.11 >>900
こういう分野に関してはいまだにオライリーは信頼できる書籍を発行してるぜ。
まあ俺の持論だがw
https://www.oreilly.co.jp/books/4873112672/
↑これとか参考になる。コマンドの列挙だけじゃなく、システムとシェルの性質とか非常に基礎的な部分から触れてるのでよい(と思う)。
こういう分野に関してはいまだにオライリーは信頼できる書籍を発行してるぜ。
まあ俺の持論だがw
https://www.oreilly.co.jp/books/4873112672/
↑これとか参考になる。コマンドの列挙だけじゃなく、システムとシェルの性質とか非常に基礎的な部分から触れてるのでよい(と思う)。
902900
2018/04/30(月) 16:27:23.982018/05/02(水) 16:02:31.91
コマンドの出力結果を一時ファイルを作らずに
一行一変数に入れたいんですけどいい方法はないでしょうか?
変数はLINE1、LINE2・・・みたいな名前で
bash依存になる配列は使わない方針です。
foo | while read -r line; do
LINE1=$line
done
みたいにするとサブシェルだから
ループ終わると消えてしまうし
一行一変数に入れたいんですけどいい方法はないでしょうか?
変数はLINE1、LINE2・・・みたいな名前で
bash依存になる配列は使わない方針です。
foo | while read -r line; do
LINE1=$line
done
みたいにするとサブシェルだから
ループ終わると消えてしまうし
2018/05/02(水) 16:34:46.41
sedかawkで代入文いっぱい出してevalかな。
特殊文字のエスケープちゃんと書かないといけないけど。
特殊文字のエスケープちゃんと書かないといけないけど。
2018/05/02(水) 16:42:46.69
cat <<. |
1st Line
2nd Line
3rd Line
.
while read -r lineval; do
ctlino=$((ctlino + 1))
printf '%s%s' 'LINE'"${ctlino}"'='"$(printf '%s' "'")""${lineval}""$(printf '%s' "'")" ';'
done |
printf '%s%s\n' "$(cat)" ':'
とりあえずこうすると
LINE1='1st Line';LINE2='2nd Line';LINE3='3rd Line';:
という出力が得られる。これを評価すればいいと思ったができねえ。
1st Line
2nd Line
3rd Line
.
while read -r lineval; do
ctlino=$((ctlino + 1))
printf '%s%s' 'LINE'"${ctlino}"'='"$(printf '%s' "'")""${lineval}""$(printf '%s' "'")" ';'
done |
printf '%s%s\n' "$(cat)" ':'
とりあえずこうすると
LINE1='1st Line';LINE2='2nd Line';LINE3='3rd Line';:
という出力が得られる。これを評価すればいいと思ったができねえ。
2018/05/02(水) 16:59:04.80
改良?
cat <<'EOF' |
1st Line
2nd Li'ne
3rd Line
EOF
while read -r lineval; do
ctlino=$((ctlino + 1))
printf '%s' "${lineval}" |
sed 's/'"'"'/'"'"'"&"'"'"'/g' |
printf '%s%s' 'LINE'"${ctlino}"'='"'""$(cat)""'" '; '
done
→ LINE1='1st Line'; LINE2='2nd Li'"'"'ne'; LINE3='3rd Line'; :
cat <<'EOF' |
1st Line
2nd Li'ne
3rd Line
EOF
while read -r lineval; do
ctlino=$((ctlino + 1))
printf '%s' "${lineval}" |
sed 's/'"'"'/'"'"'"&"'"'"'/g' |
printf '%s%s' 'LINE'"${ctlino}"'='"'""$(cat)""'" '; '
done
→ LINE1='1st Line'; LINE2='2nd Li'"'"'ne'; LINE3='3rd Line'; :
2018/05/02(水) 17:00:08.10
改良?
cat <<'EOF' |
1st Line
2nd Li'ne
3rd Line
EOF
while read -r lineval; do
ctlino=$((ctlino + 1))
printf '%s' "${lineval}" |
sed 's/'"'"'/'"'"'"&"'"'"'/g' |
printf '%s%s' 'LINE'"${ctlino}"'='"'""$(cat)""'" '; '
done |
printf '%s%s\n' "$(cat)" ':'
とりあえず単引用符のエスケープだけ。他にも必要なものがあればsedを挟んでいけばいいんでは。
cat <<'EOF' |
1st Line
2nd Li'ne
3rd Line
EOF
while read -r lineval; do
ctlino=$((ctlino + 1))
printf '%s' "${lineval}" |
sed 's/'"'"'/'"'"'"&"'"'"'/g' |
printf '%s%s' 'LINE'"${ctlino}"'='"'""$(cat)""'" '; '
done |
printf '%s%s\n' "$(cat)" ':'
とりあえず単引用符のエスケープだけ。他にも必要なものがあればsedを挟んでいけばいいんでは。
2018/05/02(水) 17:12:01.86
> sedかawkで代入文いっぱい出してevalかな。
やっぱり残る手はそれか
やっぱり残る手はそれか
2018/05/02(水) 17:18:49.70
$ radico rec -id=FMT -s=20180502040000
というコマンドがあったとして、「-s=」あとに今日の朝4時「date +"%Y%m%d"040000」の結果を入れたいんですが、一行で書く方法を教えてください
というコマンドがあったとして、「-s=」あとに今日の朝4時「date +"%Y%m%d"040000」の結果を入れたいんですが、一行で書く方法を教えてください
2018/05/02(水) 17:28:29.77
お前はこの前のレス群に対する結果とか報告してからにしろ
2018/05/02(水) 18:12:16.93
何も考えずぶん投げるけど変数exportとかじゃだめなのか
2018/05/02(水) 18:28:09.05
出来ました!
2018/05/02(水) 19:53:51.97
2018/05/02(水) 21:09:33.58
引数 $1 $2 $3 ・・・ のうち、特定の範囲n〜mを
別の関数の引数に渡すのってどうやればいいだろうか?
n〜mは条件で変わるものとする
別の関数の引数に渡すのってどうやればいいだろうか?
n〜mは条件で変わるものとする
2018/05/02(水) 21:27:56.41
2018/05/02(水) 21:34:19.62
2018/05/02(水) 22:27:50.67
shift $argnum
とかは?
とかは?
2018/05/02(水) 22:47:14.90
2018/05/02(水) 22:51:49.30
bashだとこんな感じですね
foo() { echo "${@:2:3}"; }
$ foo 1 2 3 4 5
2 3 4
foo() { echo "${@:2:3}"; }
$ foo 1 2 3 4 5
2 3 4
2018/05/03(木) 00:40:42.42
>>918
for文使えば?
selectargnum()
{
fromargnum=$1
toargnum=$2
shift ${fromargnum}
for arg in $(seq $((toargnum - fromargnum + 1))); do
printf '%s\n' "$2" && shift
done
}
selectargnum 3 5 "$@"
注意: シェル函数への第1,2引数は必ず非負整数で,引数の範囲内であるべし。
for文使えば?
selectargnum()
{
fromargnum=$1
toargnum=$2
shift ${fromargnum}
for arg in $(seq $((toargnum - fromargnum + 1))); do
printf '%s\n' "$2" && shift
done
}
selectargnum 3 5 "$@"
注意: シェル函数への第1,2引数は必ず非負整数で,引数の範囲内であるべし。
2018/05/03(木) 00:47:51.26
#! /bin/sh -
selectargnum()
{
fromargnum=$1
toargnum=$2
shift ${fromargnum}
for arg in $(seq $((toargnum - fromargnum + 1))); do
printf '%s\n' "$2"
shift
done
}
selectargnum 2 4 "$@"
もうちょっと親切に書くわ。
シェル函数selectargnumの
::仕様::
selectargnum <開始位置> <終了位置> <(処理したい)引数>
開始位置・終了位置は省略不可で,常識的な範囲であることを前提にしている。
::使い方::
上のコードを適当な名前のファイル(例えばselarg.sh)に保存して実行権限を賦与。
$ chmod +x ./selarg.sh
あとはファイル中のselectargnum函数の第1,2引数を書き換えて使える。
上の例なら
$ ./selarg.sh "第1引数" "第2引数" "第3引数" "第4引数" "第5引数"
に対して
第2引数
第3引数
第4引数
という出力が得られる。
selectargnum()
{
fromargnum=$1
toargnum=$2
shift ${fromargnum}
for arg in $(seq $((toargnum - fromargnum + 1))); do
printf '%s\n' "$2"
shift
done
}
selectargnum 2 4 "$@"
もうちょっと親切に書くわ。
シェル函数selectargnumの
::仕様::
selectargnum <開始位置> <終了位置> <(処理したい)引数>
開始位置・終了位置は省略不可で,常識的な範囲であることを前提にしている。
::使い方::
上のコードを適当な名前のファイル(例えばselarg.sh)に保存して実行権限を賦与。
$ chmod +x ./selarg.sh
あとはファイル中のselectargnum函数の第1,2引数を書き換えて使える。
上の例なら
$ ./selarg.sh "第1引数" "第2引数" "第3引数" "第4引数" "第5引数"
に対して
第2引数
第3引数
第4引数
という出力が得られる。
2018/05/03(木) 00:50:36.20
seqを除いてPOSIX準拠。
もしもより厳密にPOSIXに従いたければ当該箇所を
seq $((toargnum - fromargnum + 1))
から
yes | head -n $((toargnum - fromargnum + 1))
としてもいいだろう。
もしもより厳密にPOSIXに従いたければ当該箇所を
seq $((toargnum - fromargnum + 1))
から
yes | head -n $((toargnum - fromargnum + 1))
としてもいいだろう。
2018/05/03(木) 03:17:05.15
>>919のせいで勘違いさせたようですね
> 別の関数の引数に渡すのってどうやればいいだろうか?
重要なのはこれ
another_function() {
for i in "$@"; do
printf "%s\n" "$i"
done
}
foo() { another_function "${@:2:3}"; }
another_functionはそのまま使って、
fooの部分をPOSIX準拠にして
以下のような出力を得たいということです
$ foo a "b 1" "c 1" d e
b 1
c 1
d
> 別の関数の引数に渡すのってどうやればいいだろうか?
重要なのはこれ
another_function() {
for i in "$@"; do
printf "%s\n" "$i"
done
}
foo() { another_function "${@:2:3}"; }
another_functionはそのまま使って、
fooの部分をPOSIX準拠にして
以下のような出力を得たいということです
$ foo a "b 1" "c 1" d e
b 1
c 1
d
2018/05/03(木) 03:18:03.35
eval使うしか無いっすかね?
2018/05/03(木) 03:20:16.97
このコードの応用でできますかね?
いまいちこのコードがなにやってるのかよくわからんのですが
https://unix.stackexchange.com/questions/258512/how-to-remove-a-positional-parameter-from
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
いまいちこのコードがなにやってるのかよくわからんのですが
https://unix.stackexchange.com/questions/258512/how-to-remove-a-positional-parameter-from
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
2018/05/03(木) 03:42:12.53
>>923
おいおいヒドいな俺の>>920-922は無視かよ
引数をどうにかしたいコマンドをsomefuncとして
#! /bin/sh -
selectargnum()
{
fromargnum=$1
toargnum=$2
shift ${fromargnum}
for arg in $(yes | head -n $((toargnum - fromargnum + 1))); do
printf '%s\n' "$2"
shift
done
}
somefunc()
{
printf '%s\t%s\n%s\n' "$2" "$3" "$1"
}
somefunc $(selectargnum 2 4 "$@")
こういうので実現できると思うんだが?
なにかこれでは駄目な点があれば言ってくれ。
せっかくGW中とは言え頭使ったのにあまりにもあまりな仕打ちじゃマイカ
おいおいヒドいな俺の>>920-922は無視かよ
引数をどうにかしたいコマンドをsomefuncとして
#! /bin/sh -
selectargnum()
{
fromargnum=$1
toargnum=$2
shift ${fromargnum}
for arg in $(yes | head -n $((toargnum - fromargnum + 1))); do
printf '%s\n' "$2"
shift
done
}
somefunc()
{
printf '%s\t%s\n%s\n' "$2" "$3" "$1"
}
somefunc $(selectargnum 2 4 "$@")
こういうので実現できると思うんだが?
なにかこれでは駄目な点があれば言ってくれ。
せっかくGW中とは言え頭使ったのにあまりにもあまりな仕打ちじゃマイカ
2018/05/03(木) 04:08:41.64
>>926
somefuncは分かりづらいんでこう書き換えるけど
somefunc() {
printf '%s\n' "$@"
}
$ test.sh "a" "b" "c" "d" "e"
b
c
d
こうなるところ
$ test.sh "a 1" "b 1" "c 1" "d 1" "e 1"
b
1
c
1
d
1
somefuncは分かりづらいんでこう書き換えるけど
somefunc() {
printf '%s\n' "$@"
}
$ test.sh "a" "b" "c" "d" "e"
b
c
d
こうなるところ
$ test.sh "a 1" "b 1" "c 1" "d 1" "e 1"
b
1
c
1
d
1
2018/05/03(木) 04:23:08.37
somefuncはこうしないとだめだな。
何番目の変数に入っているのか分かりづらい
somefunc() {
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
}
何番目の変数に入っているのか分かりづらい
somefunc() {
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
}
2018/05/03(木) 04:23:43.87
なんかすごいどうでもいいことしてる気にならん?
2018/05/03(木) 04:26:07.99
しょうがないだろう。
引数には空白、シングルクォート、ダブルクォート、改行が
含まれる可能性があるんだよ
引数には空白、シングルクォート、ダブルクォート、改行が
含まれる可能性があるんだよ
2018/05/03(木) 04:29:26.87
一見うまくいったと思いきや
$ test.sh "a" "b" "c" "d" "e"
1: b
2: c
3: d
変数Aに改行が含まれている文字列を入れ
$ A="b
b
b
b
"
以下のように実行するとおかしくなる
$ test.sh "a" "b${A}b" "c" "d" "e"
1: bb
2: b
3: b
> なにかこれでは駄目な点があれば言ってくれ。
駄目な点を言った
$ test.sh "a" "b" "c" "d" "e"
1: b
2: c
3: d
変数Aに改行が含まれている文字列を入れ
$ A="b
b
b
b
"
以下のように実行するとおかしくなる
$ test.sh "a" "b${A}b" "c" "d" "e"
1: bb
2: b
3: b
> なにかこれでは駄目な点があれば言ってくれ。
駄目な点を言った
2018/05/03(木) 04:32:29.46
なお、俺が書いたコードだと以下のように正しく出力される
$ test.sh "a" "b${A}b" "c" "d" "e"
1: bb
b
b
b
b
2: c
3: d
>>925を参考にして以下のように書いた
selectargnum() {
func=$1 start=$2 length=$3
shift 3
i=0 last=$((start+length))
for arg in "$@"; do
: $((i+=1))
[ $i -gt $length ] && shift
[ $i -ge $last ] && continue
shift
set -- "$@" "$arg"
done
$func "$@"
}
somefunc() {
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
}
selectargnum somefunc 2 3 "$@"
$ test.sh "a" "b${A}b" "c" "d" "e"
1: bb
b
b
b
b
2: c
3: d
>>925を参考にして以下のように書いた
selectargnum() {
func=$1 start=$2 length=$3
shift 3
i=0 last=$((start+length))
for arg in "$@"; do
: $((i+=1))
[ $i -gt $length ] && shift
[ $i -ge $last ] && continue
shift
set -- "$@" "$arg"
done
$func "$@"
}
somefunc() {
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
}
selectargnum somefunc 2 3 "$@"
2018/05/03(木) 04:34:38.30
2018/05/03(木) 04:37:45.65
eval使ったほうが簡潔かつ速い気がしてきたw
set -- の所、何度も引数をずらす処理をしているわけだしね。
set -- の所、何度も引数をずらす処理をしているわけだしね。
2018/05/03(木) 04:38:19.15
長い
読む気にならん
読む気にならん
2018/05/03(木) 04:39:32.30
長くて読まないのはわかるが、
なぜ読まないということをわざわざ宣言するんだろう?
なぜ読まないということをわざわざ宣言するんだろう?
2018/05/03(木) 04:42:04.26
まあ長いのは、>>926のコードに合わせたからであって、
メインの処理はこれだけなんだけどね
i=0 start=2 length=3 last=$((start+length))
for arg in "$@"; do
: $((i+=1))
[ $i -gt $length ] && shift
[ $i -ge $last ] && continue
shift
set -- "$@" "$arg"
done
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
メインの処理はこれだけなんだけどね
i=0 start=2 length=3 last=$((start+length))
for arg in "$@"; do
: $((i+=1))
[ $i -gt $length ] && shift
[ $i -ge $last ] && continue
shift
set -- "$@" "$arg"
done
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
2018/05/03(木) 05:49:25.62
>>932
ちょっとリファクタリング(ってほど大層じゃないが)
selectargnum() {
func="$1"; start=$2; length=$3
shift 3
i=0; last=$((start + length))
for arg in "$@"; do
i=$((i + 1))
test ${i} -gt ${length} && shift
test ${i} -ge ${last} && continue
shift
set -- "$@" "${arg}"
done
"${func}" "${@}"
}
ちょっとリファクタリング(ってほど大層じゃないが)
selectargnum() {
func="$1"; start=$2; length=$3
shift 3
i=0; last=$((start + length))
for arg in "$@"; do
i=$((i + 1))
test ${i} -gt ${length} && shift
test ${i} -ge ${last} && continue
shift
set -- "$@" "${arg}"
done
"${func}" "${@}"
}
2018/05/03(木) 06:31:02.21
>>938
文字増やしてるだけじゃねーかw
文字増やしてるだけじゃねーかw
2018/05/03(木) 06:31:17.96
不要な文字
2018/05/03(木) 06:50:55.78
リファクタリングは文字数減らすことを言うのじゃないけど
2018/05/03(木) 07:41:52.01
不必要な機能
2018/05/03(木) 09:41:05.71
一旦SQLiteにでも格納すれば何でも出来るで
2018/05/03(木) 12:57:05.87
なんか余計に読みづらくなっただけのような
945名無しさん@お腹いっぱい。
2018/05/03(木) 13:11:25.55 解こうとしてる問題が間違っていると言ったやろw
2018/05/03(木) 13:13:23.38
bashだと簡単にできるようになったことのどこが
間違っているというのだろうか?
間違っているというのだろうか?
2018/05/03(木) 13:14:48.71
948名無しさん@お腹いっぱい。
2018/05/03(木) 13:16:44.77 >>946
問題が間違っているとハッキリ書いとるやろwアホなん?
問題が間違っているとハッキリ書いとるやろwアホなん?
2018/05/03(木) 13:17:25.13
なぜ問題が間違っているというのか?
結論を最初に持ってこないように
結論を最初に持ってこないように
950名無しさん@お腹いっぱい。
2018/05/03(木) 13:22:50.10 >>949
あ、それが分からんのかw
引数の意味をパースすれば任意の位置指定でのスライスなど不要やからな
つまりgetoptで十分な問題を間違った角度から解こうとしとるっつー事やw
てかおまえ安価ぐらいできんのか
あ、それが分からんのかw
引数の意味をパースすれば任意の位置指定でのスライスなど不要やからな
つまりgetoptで十分な問題を間違った角度から解こうとしとるっつー事やw
てかおまえ安価ぐらいできんのか
2018/05/03(木) 13:33:39.18
どういう理屈で、引数の意味をパースすれば任意の位置指定での
スライスなど不要になるのでしょうか?
スライスなど不要になるのでしょうか?
952名無しさん@お腹いっぱい。
2018/05/03(木) 13:41:59.15 >>951
まず安価しろ
まず安価しろ
2018/05/03(木) 13:43:07.07
例えばfindコマンドのように
find . -type f -exec chmod 600 {} \;
-execが来たら、chmodコマンドを;までをオプションとして
渡して実行みたいなのはスライス相当のものがないとできませんね
find . -type f -exec chmod 600 {} \;
-execが来たら、chmodコマンドを;までをオプションとして
渡して実行みたいなのはスライス相当のものがないとできませんね
2018/05/03(木) 13:44:07.01
自分がやったことがないことだからって
問題が間違ってるということにはなりませんよ
問題が間違ってるということにはなりませんよ
2018/05/03(木) 13:44:46.06
>>950
根本的に何がしたいのかに依るんじゃねーのそれは
引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね?
bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか
まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが
根本的に何がしたいのかに依るんじゃねーのそれは
引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね?
bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか
まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが
2018/05/03(木) 13:47:13.94
まあ言わないでもわかるでしょうが、
わざとスルーされないように言っておきますと、
-execは残りの引数を全て、指定したコマンドの引数として実行するものではなく
; までを引数とします。だから以下のように複数の-execもしていできます。
find . -type f -exec echo {} \; -exec echo {} \;
わざとスルーされないように言っておきますと、
-execは残りの引数を全て、指定したコマンドの引数として実行するものではなく
; までを引数とします。だから以下のように複数の-execもしていできます。
find . -type f -exec echo {} \; -exec echo {} \;
957名無しさん@お腹いっぱい。
2018/05/03(木) 13:53:29.10 >>955
位置が固定ならいきなりスライスでも構わんが
今回のやつは任意の位置を指定したいと言っとるやろ
つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから
必要な引数も選別できているはずなんや
つまりそこからさらに位置指定でスライスしたいというのは
引数解析のアプローチが間違っとるいう訳やな
位置が固定ならいきなりスライスでも構わんが
今回のやつは任意の位置を指定したいと言っとるやろ
つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから
必要な引数も選別できているはずなんや
つまりそこからさらに位置指定でスライスしたいというのは
引数解析のアプローチが間違っとるいう訳やな
2018/05/03(木) 14:10:06.58
>>957
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?
2018/05/03(木) 14:10:06.74
960名無しさん@お腹いっぱい。
2018/05/03(木) 14:17:44.042018/05/03(木) 14:21:33.10
962名無しさん@お腹いっぱい。
2018/05/03(木) 14:22:57.282018/05/03(木) 14:23:53.17
あれほど問題が間違っていると偉そうなこと言ったくせに
問題は間違ってないってことでいいんだろうな
問題は間違ってないってことでいいんだろうな
2018/05/03(木) 14:24:26.11
965名無しさん@お腹いっぱい。
2018/05/03(木) 14:25:12.822018/05/03(木) 14:25:16.94
2018/05/03(木) 14:26:18.22
968名無しさん@お腹いっぱい。
2018/05/03(木) 14:26:43.002018/05/03(木) 14:28:32.21
970名無しさん@お腹いっぱい。
2018/05/03(木) 14:29:43.062018/05/03(木) 14:32:04.43
972名無しさん@お腹いっぱい。
2018/05/03(木) 14:34:28.222018/05/03(木) 14:38:23.58
974名無しさん@お腹いっぱい。
2018/05/03(木) 14:40:51.17 >>973
いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w
いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w
2018/05/03(木) 14:40:58.71
偉そうに>>957で引数の選別をする方法で
できるような言い方をしているということは、
"このやり方の続き" でやる方法も当然思いついてるはず
質問に答えようか。
まさかここまでいって、この方法じゃ実現不可能だった
なんていうはずがないよなw
できるような言い方をしているということは、
"このやり方の続き" でやる方法も当然思いついてるはず
質問に答えようか。
まさかここまでいって、この方法じゃ実現不可能だった
なんていうはずがないよなw
2018/05/03(木) 15:39:01.57
やたらめったに長ったらしいコード書いたアホが元凶
2018/05/03(木) 15:57:16.13
たしかに俺のコードは長すぎたし引数に改行が含まれると各行を引数だと見做してしまう
修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。
実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。
それが原因で場が乱れたとするなら申し訳ない。
ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう
主張をageながら口説いてる奴にあると思うがな。
修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。
実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。
それが原因で場が乱れたとするなら申し訳ない。
ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう
主張をageながら口説いてる奴にあると思うがな。
2018/05/03(木) 16:20:04.93
どっちもはしゃぎ過ぎ
それに、安価だのageだの馬鹿みたい
それに、安価だのageだの馬鹿みたい
2018/05/03(木) 16:29:15.75
2018/05/03(木) 16:29:46.34
2018/05/03(木) 16:31:30.06
IDが出ないスレでこれほど見難い言い争いはあんま見ないな。いや醜いかw
2018/05/03(木) 16:41:10.54
ここって建設的じゃないよな、ホント
2018/05/03(木) 17:10:05.54
自力で解いたっつてんだろ、何度も。偉ぶってんのはどっちなんだか。
2018/05/03(木) 17:33:34.69
醜すぎw
2018/05/03(木) 17:54:41.55
2018/05/03(木) 19:24:32.42
この人は問題を解きたいんじゃなくて
問題を自分のルールで解かせたいだけなんだと思う
問題を自分のルールで解かせたいだけなんだと思う
2018/05/03(木) 19:33:59.23
自分のルールってなんのことや?
2018/05/03(木) 20:13:25.91
そうじゃなくて呈示されたコードの完成度が低くて、かつ
自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?
自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?
989名無しさん@お腹いっぱい。
2018/05/03(木) 20:15:23.07 ただのお子ちゃまやないかw
間違っとる言われてボクは間違ってないてすねとるだけやでw
間違っとる言われてボクは間違ってないてすねとるだけやでw
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 日中対立、打開策見えず 高市氏答弁1カ月、影響拡大 ★2 [蚤の市★]
- 小林よしのり 日中関係、来年は「ますます日本は不利に」「加害者の分際で被害者ぶって、中国が横暴だと毅然と振る舞っても滑稽なだけ」 [冬月記者★]
- 【サッカー】カズ・三浦知良、現役続行を表明 SNSで『引退勧告』殺到も… 対戦した選手「スピード、キレはないが体の使い方はうまい」 [冬月記者★]
- 『DOWNTOWN+』2回目生配信で松本の実兄・松本隆博が登場し共演 [jinjin★]
- 【金融】多重債務者急増、147万人 金融庁調査、物価高影響か [シャチ★]
- 元グラドル維新議員 夫に「サンドイッチのパン」を依頼→食パン6枚切り買われ怒り…“どちらが悪い?”SNSで議論 ★3 [muffin★]
