teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

問題点の明確化

2021/11/06 19:09

投稿

laulaula
laulaula

スコア74

answer CHANGED
@@ -34,9 +34,15 @@
34
34
  # command -arg1 -arg2 '-password'
35
35
  →ハッシュ化すべき値をシングルクォーテーションを除外した「-password」と認識する。
36
36
  ```
37
+ 問題となるのはこれをシェフスクリプトで展開するとシングルクォーテーションが消され、オプションとして認識される。
37
38
 
39
+ ```ここに言語を入力
40
+ command -arg1 -arg2 -password
38
- 上記のようにシングルクォーテーションで囲また値を文字列と解釈すコマンドは、至極当然だが先の``` bash -x ```で示し```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動(ングルクォーテーションを残か消す)をすという事実が重要と考えており、コマンド自体は秘密とさせていただきました
41
+ シングルクォーテーションが外さるため「-password」とオプションと認識する。
42
+ ```
39
43
 
44
+ シングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、至極当然だが先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動(シングルクォーテーションを残すか消す)をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
45
+
40
46
  取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。
41
47
  ※繰り返しになるが表示の問題ではない。
42
48
  ※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。

5

冗長的な文章の修正

2021/11/06 19:09

投稿

laulaula
laulaula

スコア74

answer CHANGED
@@ -27,7 +27,7 @@
27
27
  ```
28
28
 
29
29
  そして、今回の回答者様とのやり取りでここの解釈の相違により拗れた。
30
- 回答者様は単に表示の問題と指摘されたが、私は```++ echo 'h5yu|*,aid'```がそのままコマンドとして実行していると認識している。
30
+ 回答者様は単に表示の問題と指摘されたが、私は```echo 'h5yu|*,aid'```がそのままコマンドとして実行していると認識している。
31
31
  ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、シングルクォーテーションで囲まれた値を文字列として認識する。
32
32
 
33
33
  ```ここに言語を入力
@@ -35,11 +35,12 @@
35
35
  →ハッシュ化すべき値をシングルクォーテーションを除外した「-password」と認識する。
36
36
  ```
37
37
 
38
- 上記のようにシングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
38
+ 上記のようにシングルクォーテーションで囲まれた値を文字列と解釈するコマンドは、至極当然だが先の``` bash -x ```で示した```echo```コマンドも同じく多数存在する(grepなど)。その為、コマンド自体の仕様はどうでもよく、bashがそのような挙動(シングルクォーテーションか消す)をするという事実が重要と考えており、コマンド自体は秘密とさせていただきました。
39
39
 
40
- 取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。その為、上記は単に表示の問題でなく```bash```が特殊記号の有無を認識し、特殊記号が含まれないと判断した場合は勝手にシングルクォーテーションを外しコマンドとして実行される挙動を確認しているため、特殊記号が含まれず最初の一文字目がハイフンの場合はシングルクォーテーションが外され実行されるためオプションと誤認識しエラーとなると考えております。
40
+ 取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。
41
+ ※繰り返しになるが表示の問題ではない。
41
42
  ※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。
42
43
 
43
- 最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここで質問としては一旦解決済みとさせていただきます。
44
+ 最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここで質問としては一旦解決済みとさせていただきます。
44
45
 
45
46
  bashのソースコードを読めばわかるかもしれませんが、そこまで労力を掛ける必要性もございませんので。。。

4

誤字修正

2021/11/06 18:40

投稿

laulaula
laulaula

スコア74

answer CHANGED
@@ -23,7 +23,7 @@
23
23
  h5yu|*,aid
24
24
  + for line in `cat password.txt`
25
25
  + eval '(echo '\''ZrLjvRpM.4'\'' )'
26
- ++ echo ZrLjvRpM.4 ★特殊記号が含まれためシングルクォーテーションを表示されない
26
+ ++ echo ZrLjvRpM.4 ★特殊記号が含まれないためシングルクォーテーションを表示されない
27
27
  ```
28
28
 
29
29
  そして、今回の回答者様とのやり取りでここの解釈の相違により拗れた。

3

脱字修正

2021/11/06 18:17

投稿

laulaula
laulaula

スコア74

answer CHANGED
@@ -40,6 +40,6 @@
40
40
  取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。その為、上記は単に表示の問題でなく```bash```が特殊記号の有無を認識し、特殊記号が含まれないと判断した場合は勝手にシングルクォーテーションを外しコマンドとして実行される挙動を確認しているため、特殊記号が含まれず最初の一文字目がハイフンの場合はシングルクォーテーションが外され実行されるためオプションと誤認識しエラーとなると考えております。
41
41
  ※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。
42
42
 
43
- 最初がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
43
+ 最初の一文字目がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させれるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
44
44
 
45
45
  bashのソースコードを読めばわかるかもしれませんが、そこまで労力を掛ける必要性もございませんので。。。

2

誤字修正

2021/11/06 14:34

投稿

laulaula
laulaula

スコア74

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  ```
13
13
  ※コマンドの詳細は守秘義務により控えさせていただいております。
14
14
 
15
- これを```bash -x```でデバックすろと、以下のように特殊記号が含まれる場合はシングルクォーテーションが表示され、特殊記号が含まれない場合はシングルクォーテーションが表示されない挙動となることを確認。
15
+ これをechoコマンドで代替し```bash -x```でデバックすろと、以下のように特殊記号が含まれる場合はシングルクォーテーションが表示され、特殊記号が含まれない場合はシングルクォーテーションが表示されない挙動となることを確認。
16
16
 
17
17
  ```ここに言語を入力
18
18
  $ bash -x test.sh
@@ -28,8 +28,7 @@
28
28
 
29
29
  そして、今回の回答者様とのやり取りでここの解釈の相違により拗れた。
30
30
  回答者様は単に表示の問題と指摘されたが、私は```++ echo 'h5yu|*,aid'```がそのままコマンドとして実行していると認識している。
31
- ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、
31
+ ここで一点抑えておきたいのは手動で以下のようにシングルクォーテーションでパスワードをくくった場合、コマンドはシングルクォーテーションを解釈し、シングルクォーテーションで囲まれた値を文字列として認識する。
32
- シングルクォーテーションで囲まれた値を文字列として認識する。
33
32
 
34
33
  ```ここに言語を入力
35
34
  # command -arg1 -arg2 '-password'
@@ -41,6 +40,6 @@
41
40
  取り合えずは、bashとしてはシングルクォーテーションの扱いは基本コマンド側に任せる仕様なのだと推察しています。その為、上記は単に表示の問題でなく```bash```が特殊記号の有無を認識し、特殊記号が含まれないと判断した場合は勝手にシングルクォーテーションを外しコマンドとして実行される挙動を確認しているため、特殊記号が含まれず最初の一文字目がハイフンの場合はシングルクォーテーションが外され実行されるためオプションと誤認識しエラーとなると考えております。
42
41
  ※回答者様とはここのファクトで認識を合わせ、次の議論を進めていれば建設的な会話ができていたとは思うのですが。。。
43
42
 
44
- 最初がハイフンの場合、以下にシングルクォーテーションを認識させるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
43
+ 最初がハイフンの場合、どうすればシングルクォーテーションを消されずに認識させるかの回答までは届きませんでしたが、実際のスクリプトでは最初の一文字目がハイフンの場合はエラー処理に流れるように修正しておりますので、ここでも質問としては一旦解決済みとさせていただきます。
45
44
 
46
45
  bashのソースコードを読めばわかるかもしれませんが、そこまで労力を掛ける必要性もございませんので。。。

1

回答の全体を見直し

2021/11/06 14:31

投稿

laulaula
laulaula

スコア74

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