質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

1回答

400閲覧

shellの構文について$(<)と$()の違い

harurun

総合スコア5

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2020/01/13 15:11

パスワード生成などで、ランダムな16文字のパスワードを設定したく"/dev/urandom"を利用したいのですが、その際に1つわからないことがあります。

# エラー:Permission denied val1=$(/dev/urandom tr -dc 'A-Za-z0-9!$%&()*+,-./:;<=>?@[]^_{|}~' | head -c 16; echo) # 16文字ランダムに表示される val2=$(< /dev/urandom tr -dc 'A-Za-z0-9!$%&()*+,-./:;<=>?@[]^_{|}~' | head -c 16; echo) echo ${val1} echo ${val2}

不等号がどういう風に作用しているのか理解せずに利用しているため、ご教授願いたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Shellの 構文としては var=$( ... ) です。
カッコ内の コマンドライン文字列が 実行され、標準出力の内容が 変数 var に代入されます。

コマンドライン文字列は、基本的には コマンド 引数 ... という形になりますが、< ファイル コマンド 引数 ... という書き方は、入力のリダイレクトというやつで、ファイルをコマンドの標準入力にリダイレクトさせる書き方です。

/dev/urandom tr -dc 'A-Za-z0-9!$%&()*+,-./:;<=>?@[]^_{|}~' | head -c 16; echo

この場合、/dev/urandom が実行ファイルとして 解釈されますが、実行権限がないので パーミッションエラーになります。

< /dev/urandom tr -dc 'A-Za-z0-9!$%&()*+,-./:;<=>?@[]^_{|}~' | head -c 16; echo

この場合は、/dev/urandom ファイルが tr コマンドの標準入力にリダイレクトされます。
cat /dev/urandom | tr -dc ... と書いた場合と同じ結果になります。

投稿2020/01/13 15:32

take88

総合スコア1379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harurun

2020/01/14 00:44

凄くわかりやすかったです! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問