回答編集履歴
6
問題点の明確化
test
CHANGED
@@ -70,9 +70,21 @@
|
|
70
70
|
|
71
71
|
```
|
72
72
|
|
73
|
+
問題となるのはこれをシェフスクリプトで展開するとシングルクォーテーションが消され、オプションとして認識される。
|
73
74
|
|
74
75
|
|
76
|
+
|
77
|
+
```ここに言語を入力
|
78
|
+
|
79
|
+
command -arg1 -arg2 -password
|
80
|
+
|
81
|
+
→シングルクォーテーションが外されてるため「-password」とオプションと認識する。
|
82
|
+
|
83
|
+
```
|
84
|
+
|
85
|
+
|
86
|
+
|
75
|
-
|
87
|
+
シングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、至極当然だが先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動(シングルクォーテーションを残すか消す)をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
|
76
88
|
|
77
89
|
|
78
90
|
|
5
冗長的な文章の修正
test
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
そして、今回の回答者様とのやり取りでここの解釈の相違により拗れた。
|
58
58
|
|
59
|
-
回答者様は単に表示の問題と指摘されたが、私は```
|
59
|
+
回答者様は単に表示の問題と指摘されたが、私は```echo 'h5yu|*,aid'```がそのままコマンドとして実行していると認識している。
|
60
60
|
|
61
61
|
ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、シングルクォーテーションで囲まれた値を文字列として認識する。
|
62
62
|
|
@@ -72,17 +72,19 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
|
75
|
-
上記のようにシングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
|
75
|
+
上記のようにシングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、至極当然だが先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動(シングルクォーテーションを残すか消す)をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。
|
79
|
+
取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。
|
80
|
+
|
81
|
+
※繰り返しになるが表示の問題ではない。
|
80
82
|
|
81
83
|
※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。
|
82
84
|
|
83
85
|
|
84
86
|
|
85
|
-
最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここで
|
87
|
+
最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでの質問としては一旦解決済みとさせていただきます。
|
86
88
|
|
87
89
|
|
88
90
|
|
4
誤字修正
test
CHANGED
@@ -48,7 +48,7 @@
|
|
48
48
|
|
49
49
|
+ eval '(echo '\''ZrLjvRpM.4'\'' )'
|
50
50
|
|
51
|
-
++ echo ZrLjvRpM.4 ★特殊記号が含まれ
|
51
|
+
++ echo ZrLjvRpM.4 ★特殊記号が含まれないためシングルクォーテーションを表示されない
|
52
52
|
|
53
53
|
```
|
54
54
|
|
3
脱字修正
test
CHANGED
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
最初がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
|
85
|
+
最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
|
86
86
|
|
87
87
|
|
88
88
|
|
2
誤字修正
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
これを```bash -x```でデバックすろと、以下のように特殊記号が含まれる場合はシングルクォーテーションが表示され、特殊記号が含まれない場合はシングルクォーテーションが表示されない挙動となることを確認。
|
29
|
+
これをechoコマンドで代替し```bash -x```でデバックすろと、以下のように特殊記号が含まれる場合はシングルクォーテーションが表示され、特殊記号が含まれない場合はシングルクォーテーションが表示されない挙動となることを確認。
|
30
30
|
|
31
31
|
|
32
32
|
|
@@ -58,9 +58,7 @@
|
|
58
58
|
|
59
59
|
回答者様は単に表示の問題と指摘されたが、私は```++ echo 'h5yu|*,aid'```がそのままコマンドとして実行していると認識している。
|
60
60
|
|
61
|
-
ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、
|
61
|
+
ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、シングルクォーテーションで囲まれた値を文字列として認識する。
|
62
|
-
|
63
|
-
シングルクォーテーションで囲まれた値を文字列として認識する。
|
64
62
|
|
65
63
|
|
66
64
|
|
@@ -84,7 +82,7 @@
|
|
84
82
|
|
85
83
|
|
86
84
|
|
87
|
-
最初がハイフンの場合、
|
85
|
+
最初がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
|
88
86
|
|
89
87
|
|
90
88
|
|
1
回答の全体を見直し
test
CHANGED
@@ -1 +1,91 @@
|
|
1
|
-
|
1
|
+
少し荒れてしまいましたので、内容を整理し解決済みとさせていただきます。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
今回、複数のパスワードを一括でハッシュ化するシェルスクリプトを作成した際、変数に代入したパスワードの一文字目がハイフン(-)から始まるとハッシュ化コマンドがオプションと誤認識しエラーとなる事象が発生しました。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
大まかな構文は以下。
|
10
|
+
|
11
|
+
```ここに言語を入力
|
12
|
+
|
13
|
+
#!/bin/bash
|
14
|
+
|
15
|
+
for line in `cat password.txt`
|
16
|
+
|
17
|
+
do
|
18
|
+
|
19
|
+
eval "(command -arg1 -arg2 '${line}' )"
|
20
|
+
|
21
|
+
done
|
22
|
+
|
23
|
+
```
|
24
|
+
|
25
|
+
※コマンドの詳細は守秘義務により控えさせていただいております。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
これを```bash -x```でデバックすろと、以下のように特殊記号が含まれる場合はシングルクォーテーションが表示され、特殊記号が含まれない場合はシングルクォーテーションが表示されない挙動となることを確認。
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
```ここに言語を入力
|
34
|
+
|
35
|
+
$ bash -x test.sh
|
36
|
+
|
37
|
+
++ cat password.txt
|
38
|
+
|
39
|
+
+ for line in `cat password.txt`
|
40
|
+
|
41
|
+
+ eval '(echo '\''h5yu|*,aid'\'' )'
|
42
|
+
|
43
|
+
++ echo 'h5yu|*,aid' ★特殊記号が含まれるためシングルクォーテーションを表示される
|
44
|
+
|
45
|
+
h5yu|*,aid
|
46
|
+
|
47
|
+
+ for line in `cat password.txt`
|
48
|
+
|
49
|
+
+ eval '(echo '\''ZrLjvRpM.4'\'' )'
|
50
|
+
|
51
|
+
++ echo ZrLjvRpM.4 ★特殊記号が含まれるためシングルクォーテーションを表示されない
|
52
|
+
|
53
|
+
```
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
そして、今回の回答者様とのやり取りでここの解釈の相違により拗れた。
|
58
|
+
|
59
|
+
回答者様は単に表示の問題と指摘されたが、私は```++ echo 'h5yu|*,aid'```がそのままコマンドとして実行していると認識している。
|
60
|
+
|
61
|
+
ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、
|
62
|
+
|
63
|
+
シングルクォーテーションで囲まれた値を文字列として認識する。
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
```ここに言語を入力
|
68
|
+
|
69
|
+
# command -arg1 -arg2 '-password'
|
70
|
+
|
71
|
+
→ハッシュ化すべき値をシングルクォーテーションを除外した「-password」と認識する。
|
72
|
+
|
73
|
+
```
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
上記のようにシングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。その為、上記は単に表示の問題でなく```bash```が特殊記号の有無を認識し、特殊記号が含まれないと判断した場合は勝手にシングルクォーテーションを外しコマンドとして実行される挙動を確認しているため、特殊記号が含まれず最初の一文字目がハイフンの場合はシングルクォーテーションが外され実行されるためオプションと誤認識しエラーとなると考えております。
|
82
|
+
|
83
|
+
※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
最初がハイフンの場合、以下にシングルクォーテーションを認識させるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
bashのソースコードを読めばわかるかもしれませんが、そこまで労力を掛ける必要性もございませんので。。。
|