[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/11 08:58 / Filesize : 268 KB / Number-of Response : 1033
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合 その26



1 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:07:26.41 .net]
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
  heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
echo.2ch.net/test/read.cgi/unix/1439563321/

301 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/08/30(水) 10:21:44.01 .net]
あ、あと今さっき教えてもらった
read response < /dev/tty
↑が、上手くいった!ありがと〜

unixだとreadコマンドはリダイレクションができなかったらしいが、
linuxだと出来るのか。。。

302 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/06(水) 14:03:04.96 .net]
1. find . -name aaa -o -name bbb
はうまくいくけど
2. find . -name aaa -o -name bbb -print
では aaa が引っかからなくて、
3. find . \( -name aaa -o -name bbb \) -print
だと OK な理由がいまいちわかりません。括弧なしだと
4. find . -name aaa -o \( -name bbb -print \)
と解釈されてしまうからってのはわかりますが、
 「アクション指定なしの場合 -print の挙動となる」
 「exp1 -o exp2 で exp1 が偽なら exp2 を実行しない」
であるならば、1 が表示されて、2・4 の aaa が表示されないのはなぜでしょう。
ちなみに、GNU find(1) には下記。
 If the expression contains no actions other than -prune, -print is performed on all files for which the
 expression is true.
FreeBSD の find(1) は下記でした。
 If none of -exec, -ls, -print0, or -ok is specified, the given expression shall be
 effectively replaced by ( given expression ) -print.

と書いていて思いましたが、括弧等や -o に関係なく、引数 expression のどこかに
アクションが 1つでも記述されていれば、-print を補完しない、ってことですかね。

303 名前:294 mailto:sage [2017/09/06(水) 14:14:11.12 .net]
> 括弧等や -o に関係なく、引数 expression のどこかに
> アクションが 1つでも記述されていれば、-print を補完しない、ってことですかね。
ということのようでした。

https://svnweb.freebsd.org/base/head/usr.bin/find/function.c?revision=314436&view=markup#l1344
-print とかが見つかると isoutput=1 とする。

https://svnweb.freebsd.org/base/head/usr.bin/find/find.c?revision=314436&view=markup#l113
!isoutput の場合のみ、-print を補完する。

expression のツリー構造をたどって、アクションがない expression が
見つかったら全部 -print を補完する、としていたらよかった気がしますが、
いまさらどうしようもないですね。

304 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/08(金) 02:42:55.52 .net]
$ bc <<< '6*7'
42
とかの`<<<` ってなんという名称ですか?
ヒアドキュメンとだとずっと思っていたのですが,その仕様を調べようとしたらヒアドキュメントというのは
$ cat << . > ~/foo.txt
a
b
c
.
の << . から . を指すようなのでした。

305 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/08(金) 04:08:06.24 .net]
ヒアストリング

306 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/08(金) 07:40:56.64 .net]
ヒアストリングは未だに使い方がよく分かってない

307 名前:名無しさん@お腹いっぱい。 mailto:sage All You Need is Shell [2017/09/09(土) 13:43:30.38 .net]
>>300
ありがとうございます!
お礼が遅くなり申し訳無いです。

308 名前:名無しさん@お腹いっぱい。 [2017/09/11(月) 20:58:07.04 .net]
あるマシン環境を仮想マシンとかでバックアップしておいて
1つのマシン上であるサーバを構築して、
historyからその構築したコマンド群を全部シェルスクリプトに
コピペして、そのシェルスクリプトを
サーバ構築前のマシン上で実行したら全く同じサーバが一瞬で構築できるの?

309 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/11(月) 22:00:14.58 .net]
chefとか使えよ



310 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/11(月) 22:47:46.40 .net]
冪等性が保証されてるスクリプトなら同じサーバーができる

311 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/12(火) 16:18:38.21 .net]
ネットワーク経由のインストールとかしてて
サーバの状態により変わりそう

312 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/12(火) 18:22:51.99 .net]
サーバーじゃないけど仮想マシンで似たような事してる
ヒストリーからってより自分でメモしといたコマンド群だけど
けっこう省力化出来てる
あとスクリプト書いてから時間が経過するとソフトウェアの
ダウンロード元のURLが変わったりしてエラーが出ることは多々ある

313 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/12(火) 20:18:24.96 .net]
結局リプレイしたいときにはアプリやOSのバージョンが微妙に上がってて、
手順を修正しながらやらなきゃダメってのはありがちだな。

314 名前:名無しさん@お腹いっぱい。 [2017/09/13(水) 13:26:43.86 .net]
変数やコマンド文字列の展開と
ワイルドカード/正規表現の展開って原理が違うの?

315 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/13(水) 14:55:00.94 .net]
どういう意味?

316 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 00:00:47.00 .net]
>>309
言ってることが曖昧だが,「グロブ」と「正規表現」は違うよ
原理が違うかどうかは知らんが,少なくとも挙動は別物
例えばアスタリスクはグロブだとワイルドカードとして,正規表現だとクリーネ閉包としての役割を果す

317 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 01:58:23.04 .net]
グロブ(含ワイルドカード)と正規表現の違いを聞いてるのではないでしょう

318 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 05:18:47.05 .net]
質問の意味がわかんないんです(><)

319 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 06:04:07.07 .net]
すみませんが詳しい方のみ回答をお願いします



320 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 06:59:44.81 .net]
ここにはいません

321 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 10:48:20.75 .net]
みなさんコマンドの頭にバックスラッシュって付けてます?
私は安全を期して付けているのですが そうしているシェルスクリプトが以外に少ないので
気にしなくてもいいんですかね

322 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 10:59:51.81 .net]
付けないとどんな危険があると想定してるの?

323 名前:173 mailto:sage [2017/09/14(木) 12:57:09.36 .net]
alias cp='rm -rf'
cp a --> rm -rf a
\cp a --> cp a

324 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 13:21:22.76 .net]
へぇ

325 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 13:26:37.84 .net]
cshだとaliasが機能しちゃうんだね

326 名前:313 mailto:sage [2017/09/14(木) 13:42:49.97 .net]
173 --> 313

327 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 14:22:08.99 .net]
cshはデフォルトだと必ず.cshrc読んじゃうからねぇ

328 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 14:51:18.91 .net]
>>309
翻訳するとこういう感じだと想像

変数の展開: variable expansion ( e.g. ${var} )
コマンド文字列の展開: command substitusion ( e.g. $(command) )
ワイルドカードの展開: filename expansion ( e.g. *.sh )
正規表現の展開: ???

正規表現の展開って何? find -regexとかのこと言ってるの?
あと原理って? 同じか違うか知りたい理由は何?
人に伝わるように質問しないと誰も分からないぞ

329 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 14:57:45.50 .net]
cshを前提にしちゃいかんでしょう



330 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 16:44:13.36 .net]
>>324
前提というか、 >>316 はそういう環境なんだなと深読みしただけ

331 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 17:20:02.07 .net]
いまどきcshでスクリプトを書くおとこの人って…

332 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 18:02:43.44 .net]
>>318はcshじゃないな。
むかしのcshで痛い目にあってなますを吹いてるとか?

333 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/14(木) 18:37:11.41 .net]
>>325
深読みが過ぎるのでは
Bシェル系使ってて心配しすぎてるだけという可能性もある

334 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/16(土) 04:51:53.35 .net]
>>316を見て思ったのが シェバンの書き方。
#!/bin/sh -
と書けと駱駝にはあったが 存外そうしている Shell Script がない
まあ余程のことがない限り sh がオプションを勘違いするなんてないが

335 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/16(土) 08:20:15.68 .net]
#!/bin/sh -
set -x
set -u
...
set +u
set +x

336 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/17(日) 11:16:56.16 .net]
set −xって要らないでしょ

337 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/17(日) 13:02:27.61 .net]
sexに空目した

338 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/18(月) 09:06:16.47 .net]
set -u 便利だな

339 名前:名無しさん@お腹いっぱい。 mailto:age [2017/09/18(月) 17:34:05.37 .net]
新しい関数として
ls () {
  \ls --width=`\echo $COLUMN`
}
という関数を作って,ls のエイリアスとして動作させたいのですが,
コマンドラインで $ ls と入力すると無限ループに陥ります。
多分というか確実に関数 ls が自分自身を呼び出している為に生じる現象だと思います。
これを回避し,ls という関数を安全に作製するにはどうすればいいでしょうか。
常用しているシェル bash です。
bash 独自の拡張でそのような(関数の再帰を防ぐ)機能があれば教えて下さい。



340 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/18(月) 17:35:32.76 .net]
関数中のlsを絶対パスで呼ぶ

341 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/18(月) 17:44:16.70 .net]
command ls --width=$(echo ${COLUMN:-50});

とかでいいんじゃない

342 名前:331 mailto:sage [2017/09/18(月) 18:25:53.39 .net]
>>335 様、>>336 様、ありがとうございます。
どちらの方法でも上手く行きました。身勝手ながら >>336 様の方法を採ることにしました。
蛇足気味ですが、最終的に以下のような関数にしました。良かったら添削してください。
POSIX とかは考えてないです。
function ls () {
  local _opt="--ignore-backups --color=always --format=across --group-directories-first --indicator-style=classify --literal --sort=time --width=`\echo $COLUMNS`"
  command ls $_opt
}

343 名前:331 mailto:sage [2017/09/18(月) 18:28:49.27 .net]
s:/`\\echo $COLUMNS`/$(\\echo ${COLUMNS})/

344 名前:331 mailto:sage [2017/09/18(月) 18:55:59.93 .net]
Better?
function ls () {
  local _opt="--ignore-backups --color=always --format=across --group-directories-first --indicator-style=classify --literal --sort=time --width=$(\command echo ${COLUMNS})"
  \command -p ls $_opt $@
}

345 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/18(月) 20:05:49.92 .net]
lsを常に特定のオプション付けて実行したいのならLS_OPTIONS使えばいいと思う
それからfunction name ()はfunction nameかname () のどちらかにすべき
name()の方が汎用性高い

346 名前:331 mailto:sage [2017/09/18(月) 20:49:26.19 .net]
>>340
ありがとうございます!
LS_OPTIONS は知りませんでした。MANOPT や LESS みたな感じなんですかね。
函数は POSIX に合わせて ls () にしようと思ったんですが,ちょっと個人的に気持ち悪くて,どうしても function が取っ払えませんでした……。

347 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/18(月) 21:20:07.09 .net]
別に身勝手ってほどのことでもなくね

348 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/21(木) 02:41:20.96 .net]
シェルの解釈を標準出力に印刷するコマンドってある/作れますか?
グロブやエイリアスがどう解釈/引き渡されるのかを知りたいです。
$ showraw 'ls */*'
ls a/a a/b a/c b/a c/a c/b
みたいな。
検索も一通りしたのですが見付からないです。
シェルによってシェルそれ自身の機能を調べるのは無理なんですかね。

349 名前:340 mailto:age [2017/09/21(木) 02:42:16.10 .net]
すいません。age ます。



350 名前:名無しさん@お腹いっぱい。 mailto:age [2017/09/21(木) 02:44:04.33 .net]
$ showraw 'ls */*'
ls -F -A a/a a/b a/c b/a c/a c/b
エイリアスも解釈されるのでこんなかんじですね。

351 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/21(木) 05:13:34.59 .net]
コマンドの方はtype ls 引数の方はecho */* で良くね
取り敢えずshとbashで確認

352 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/21(木) 06:12:05.17 .net]
$ ls */*
と入力したところで ESC \C-e をタイプするとエイリアスが展開され
\C-x* をタイプするとワイルトカードが展開される

353 名前:名無しさん@お腹いっぱい。 mailto:344 [2017/09/21(木) 06:21:42.53 .net]
すまん、bash限定

354 名前:名無しさん@お腹いっぱい。 [2017/09/21(木) 07:24:19.18 .net]
>>343

$ set -x
$ ls */* >/dev/null

355 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/21(木) 08:38:01.77 .net]
>>346 -- >>348
ありがとうございます。しかしできればエイリアスごと展開したいのです。

>>349
おわ!まさにこんな感じです。多分コマンドプロンプト関連の命令群も一緒に出力されますが,これはまあ awk か何かで頑張って切り取ります。一応 zsh,bash,dash で確認できました。

356 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/26(火) 02:43:18.09 .net]
>>333
set -u 便利ですね
~/.bashrcに書こうかしら
とくに弊害ないですよね?

357 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 10:22:22.57 .net]
すいません。わかるかたいたら教えてください。

基本的にカンマ区切りの行なのですが、1列目が""で囲まれ、"aaa,bbb,ccc"のように
なることがあります。
1列目のみに発生します。
この1列目のケースだけ、カンマをスペース等に置換したいと思っています。

イメージはこうです。

"aaa,bbb,ccc",AAAA,BBBB,CCCC
aaa,AAAA,DDDD,EEEE

"aaa bbb ccc",AAAA,BBBB,CCCC
aaa,AAAA,DDDD,EEEE

理由はエクセルに取り込むときにずれてしまうためです。

awkで出来た気がするのですが、うまく出来ません。
どなたか心当たりないでしょうか。

358 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 10:41:01.84 .net]
Excelならダブルクオートちゃんと扱うはずだよ
勘違いか、変な文字入ってない?

359 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 11:09:26.14 .net]
テキストをコピーして貼り付ける時にカンマ区切りでバラすように貼り付けると囲んでてても関係なくバラさなかったっけ?



360 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 11:10:20.00 .net]
そんなことなかったわ

361 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 11:41:08.89 .net]
もっとうまく書けそうな気がするものの
perl -pe 'if (/^"/) { @f = split/"/, $_, 3; $f[1] =~ s/,/ /g; $_ = join "\"", @f }'

362 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 12:17:55.02 .net]
awkとBEGINで昔出来た記憶があるのですが。上手くいかず。

>>353
あれ、確かにEXCELには想定ではれました、すいませんさっきも同じにようにはったつもりで、ばらされたのですが。

>>356
一行Perlの文法の意味はわかりませんが、確かに出来ました!

363 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 22:34:38.91 .net]
区切り文字を"にして配列に取り込んで,を に置換えた後、最初と最後に"を追加する
perl -F\" -anle '$F[1] =~ s/,/ /g; $F[1] =~ s/(.+)/\"$1\"/; print @F'

awkでは
awk 'BEGIN {FS="\""; OFS="\""} {gsub(","," ",$2); print $0}'

でいいような、なんか自信ないけど

364 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/28(木) 22:48:57.65 .net]
GNU awk の FPAT を使ってこんな感じで

gawk -vFPAT='(".+?"|[^,]*)' -vOFS=, '{gsub(/,/," ",$1);print}' data.csv

365 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/29(金) 04:05:27.30 .net]
perl -pe 's/^("[^"]*")/$1=~s|,| |gr/e'

366 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/29(金) 16:42:39.76 .net]
perl -pe 's/,(?=.*\")/ /g'

367 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/29(金) 17:03:38.90 .net]
suge-

368 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/09/30(土) 13:09:25.90 .net]
>>352
#!/bin/sh
IFS=\"
while read X Y Z ; do
  if [ "$X" = "" ] ; then
    echo -n \"$Y\" | sed 's/,/ /g'
    echo $Z
  else
    echo $X
  fi
done

369 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/02(月) 11:37:31.18 .net]
sed '/^"[^"]*"/{H;s///;x;s/\n//;s/^\("[^"]*"\).*/\1/;s/,/ /g;G;s/\n//;}'



370 名前:名無しさん [2017/10/12(木) 11:03:43.53 .net]
bashで変数展開するときに、名前末尾にハイフン付けるのはどういう意味なんでしょうか?

${abc-}

371 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 13:43:34.47 .net]
>>365
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB

372 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 14:06:07.63 .net]
今まさにそのページ読んでたけど、:いるよな
ナシの使い方なんてあったっけか

373 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 16:13:02.77 .net]
> コロンを省略した場合には設定されているかどうかのみを調べます。

374 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/12(木) 16:37:37.56 .net]
何度か読み返してようやく理解した
unsetされてるか空値が入ってるかの違いに対応出来るのか

375 名前:名無しさん@お腹いっぱい。 [2017/10/13(金) 18:57:11.77 .net]
ログイン時に読み込まれる ~/.profile ファイルは,「誰が」読み込んでいるのでしょうか。
普通 sh もしくはその代替シェルかなと思うのですが,実際はどうなのか気になります。
というのも,私が普段使っている Debian GNU/Linux ではデフォルトシェルは bash に指定しているのですが,~/.profile の中に bash っぽい変数 (${HOGE} という書き方) があったので。

376 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/13(金) 19:08:59.70 .net]
>>366読んでみたらいいじゃない
起動のところ

377 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/13(金) 19:12:36.61 .net]
${HOGE}はbashに限らないよ

378 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:33:15.35 .net]
>>372
誰へのレス?

379 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:33:50.98 .net]
>>370
Linuxの質問はLinux板で



380 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:37:55.44 .net]
>>370

くだらねえ質問はここに書き込め!Part 229
mao.5ch.net/test/read.cgi/linux/1505217859/

初心者の質問相談にやさしく答えるスレ Part9
mao.5ch.net/test/read.cgi/linux/1504269873/

381 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/14(土) 00:56:47.50 .net]
>>370
もしかしてこの人?
https://mao.5ch.net/test/read.cgi/linux/1504269873/343

382 名前:370 mailto:sage [2017/10/14(土) 00:58:01.90 .net]
あぁ、すまん
>>371へのレスか
たしかに${HOGE}記法はたいていのshで使えるね

383 名前:370 mailto:sage [2017/10/14(土) 00:58:50.55 .net]
>>371じゃなくて>>370か、、、

384 名前:名無しさん@お腹いっぱい。 [2017/10/20(金) 11:02:46.23 .net]
>>377
何を言ってるのがわからん。bshが元祖なのに。

385 名前:370 mailto:sage [2017/10/20(金) 17:00:36.31 .net]
余計なレスだったんでわからんならわからんでいいよ

386 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 01:22:29.89 .net]
スレチ気味だけど,ある種の Shell って,
$ cd ///////
みたいなことをするとルートディレクトリだと認識するんだな。
個人的に ~ がすごく打ちにくい位置にあるので // を ~ だと解釈させようと試行錯誤してるときに発見した。
これはルートディレクトリが特別って訳じゃなく,
$ ls /usr////bin///////
みたいなことでも問題ない。ということは // == ~ にすることは Shell のソース弄るくらいしか方法がないということになる。
俺みたいな無駄な努力をしないために残す

387 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 01:32:07.61 .net]
それシェルの機能じゃなくね?

388 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 01:36:03.89 .net]
こういうのも開けるし
https://mevius.5ch.net///test////read.cgi/////unix//////1489979246///////l50

389 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 08:08:40.09 .net]
もしかして RFC とかで実装が統一されてんのか。



390 名前:370 mailto:sage [2017/10/21(土) 14:49:37.55 .net]
>>381
cdについてはPOSIXで決まっている
pubs.opengroup.org/onlinepubs/9699919799/utilities/cd.html
の8のc

>>382
シェル一部であるcdコマンドの機能

>>383
それはまた別の話

391 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 14:51:29.58 .net]
$ /bin/echo /usr////bin///////
/usr////bin///////
$

となるので、lsについてはシェルが解釈してるわけではなくlsが解釈していると思われる

392 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 14:55:41.90 .net]
まあ//を~にしたいならシェルのキーバインド使えばいいんじゃないですかね

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 15:01:35.03 .net]
ちなみにこんなんなったりする
シェルの種類によって挙動は違うかも

$ cd //
$ pwd
//
$

理由は
www.unixguide.net/unix/bash/E10.shtml

394 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/21(土) 15:03:36.25 .net]
キーバインドいじっちゃうと
「http://」を打とうとして「http:~」になったりして困らないか

395 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:52:10.67 .net]
>>385
「An implementation may」だから必ずではないのでは

396 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/22(日) 21:04:49.39 .net]
必ずって言ったっけ

397 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/22(日) 21:24:08.21 .net]
bashはパス中の複数の/を一つにするはず

398 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/22(日) 22:40:16.51 .net]
>>392
>>388

399 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:24:16.45 .net]
ファイルをリネームしてコピーし続けるスクリプトなんですが
コマンドが見つからないと出てよくわかりません

#/bin/sh

PATH='/var/log/'
PATH2='dnsmasq.log'
DOT='.'

for i in 6 5 4 3 2 1
do
PATH3=$PATH$PATH2$DOT$i
PATH4=`expr $i - 1`
PATH5=$PATH$PATH2$DOT$PATH4
mv $PATH5 $PATH3
done

PATH6=0

mv $PATH$PATH2 $PATH$PATH2$PATH6

exit 0



400 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/10/26(木) 13:29:36.84 .net]
>>394
for VAR in ARGS; do
command;
done






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<268KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef