xmllint で、タグの中身だけを取得したい

投稿者: Anonymous rest api をたたいた結果を、 xmllint で処理することがあります。このとき、自分の知識では、以下のようにほしいタグを抽出することはできても、その中身だけを取り出すことができないと思っています。 もちろん、結果をさらに sed で処理するなどすれば、タグの中身を抽出するのはできるのですが、ちょっとしたスクリプトを書くときなどに、いちいちこれを記述するのは手間です。xmllint だけで、タグの中身だけを出力することはできませんでしょうか。 例えばのコマンド curl http://www.redmine.org/projects/redmine/issues.xml | xmllint –xpath /issues/issue/id – 今現在の出力: <id>23505</id><id>23502</id><id>23501</id><id>23498</id><id>23497</id><id>23495</id><id>23493</id><id>23491</id><id>23488</id><id>23478</id><id>23472</id><id>23471</id><id>23470</id><id>23467</id><id>23463</id><id>23459</id><id>23458</id><id>23448</id><id>23444</id><id>23434</id><id>23430</id><id>23429</id><id>23425</id><id>23423</id><id>23419</id> ほしい出力: 23505 23502 23501 23498 23497 23495 23493 23491 23488 23478 23472 23471 23470 23467 23463 23459 23458 23448 23444 23434 23430 23429 23425 23423 23419 解決 回りくどい方法になりますが、以下の様にすると期待通りの出力結果にはなります(非効率ではありますが)。 $ curl -sO http://www.redmine.org/projects/redmine/issues.xml $ cnt=$(xmllint…(Continue Reading)

シェルで特定の文字から特定の文字までを抜き出す方法

投稿者: Anonymous 下記のtoken.txtからaccess_tokenの中身(ya〜rJ)だけを標準出力させる方法を教えて下さい。 $ cat token.txt “access_token”: “ya29.GltzBPiM93Gz67sL67VdZfQ5IDySH7iWenpufvl3dAEPnH7DeUxdL45s1pgnl7Ixs2rsj56dXygMkphYuvVxFYGqiz9qfb3IRqqyNqLJjtuIvVfznZBu2KPaLOrJ”, 解決 cat token.txt | tr -d ‘" ‘ | awk -F: ‘{ print $2 }’ trコマンドで不要なクォート(と空白)を予め削除、awkコマンドで2列目の値(=今回必要なaccess_token)を出力しています。 回答者: Anonymous

ハイフン (-) で始まるファイルを mv するには?

投稿者: Anonymous slack でダウンロードしたテキストスニペットは、デフォルトでは -.txt で作成される様子です。これをコマンドラインから mv しようとしたところ、以下のエラーが発生しました。 % mv -.txt hoge.txt mv: invalid option — ‘.’ Try ‘mv –help’ for more information. どうやら、ハイフン(-) で始まるために、オプション引数であると解釈されている様子です。 質問 どうやったら、ハイフンから始まるファイルを mv できますか? 解決 mv — -.txt hoge.txt と — を指定するとそれ以降は-をオプションと認識しなくなります 回答者: Anonymous

行頭にある >&2 の意味(docker-composeによるコンテナ起動順制御に使用)

投稿者: Anonymous シェルスクリプトについて質問があります。 下記のコード内で2箇所の >&2 という記述がありますがどういう意味でしょうか。 #!/bin/bash set -e host=”$1″ shift cmd=”[email protected]” until psql -h “$host” -U “postgres” -c ‘l’; do >&2 echo “Postgres is unavailable – sleeping” sleep 1 done >&2 echo “Postgres is up – executing command” exec $cmd 引用元: http://docs.docker.jp/compose/startup-order.html $ ls >&2 という形で ls の標準出力を標準エラー出力にリダイレクトするというような理解はあります。 自分の現状の認識は psql -h “$host” -U “postgres”…(Continue Reading)

シェルスクリプトで特定のコマンドを無視する方法はないですか?

投稿者: Anonymous AWS EC2 用のセットアップシェルスクリプトを dockerfile に移植しようと思い FROM ubuntu:16.04 COPY setup.sh /root/ RUN bash /root/setup.sh という Dockerfile を描いて docker build -t test -f Dockerfile . で実行してみたのですが /root/setup.sh: 8: /root/setup.sh: sudo: not found と言われます sudo を消せばいいだけなのですが できれば setup ファイルそのままの状態で流用できれば EC2用とdocker用で2重管理しなくてすみます また sudo をインストールすれば解決しそうですが docker 内ではどうせ root でしか作業しないので sudo コマンド自体を無視するようにできないでしょうか alias sudo=” みたいなことを描いてみたんですがやはり sudo: command not found…(Continue Reading)

シェルスクリプトでnode.jsがすでにインストール済みかチェックするには?

投稿者: Anonymous シェルスクリプトを始めたばかりなのですが、 件名の処理をどのようにしたら良いかわからず質問しました。 macにてシェルスクリプトを使って、Node.jsが入っていなければ、 Node.jsをダウンロードするという処理を書きたいのですが 入っていればと言うのをどのように書けば良いかわかりません。 Node.jsのダウンロードは、 下記のコマンドで実現できました。 curl -O https://nodejs.org/dist/v0.12.5/node-v0.12.5.pkg 処理としては下記のようになるはずです。 #!/bin/sh if アプリが存在しない then curl -O https://nodejs.org/dist/v0.12.5/node-v0.12.5.pkg fi   MacOSX:10.10.3   ■最終目的は下記の手順をシェルスクリプト化する事です。 ●Node.jsダウンロード  https://nodejs.org/download/ ●ファイルサーバーとするフォルダを指定  1:フォルダ作成  2:コマンドプロンプトから1:のフォルダへ移動  例)cd /path/to/my/project  3:コマンドプロンプトにて下記入力   npm install connect ●jsファイルを1のフォルダに作成  ・jsファイルの中身は下記ソース var connect = require(‘connect’), serveStatic = require(‘serve-static’); var app = connect(); app.use(serveStatic(__dirname)); app.listen(5000);  ・適当な名前で保存   仮にserver.jsとする。 ●コマンドラインからサーバー実行  1:コマンドプロンプトからjsファイルのフォルダへ移動…(Continue Reading)

git で指定ファイルのプロジェクトルートからの相対パスを取得したい

投稿者: Anonymous エディタで git 管理されているファイルを見ているとき、このファイルが git のルートディレクトリからの相対パスが、一体どうなっているのか気になりました。 指定されたパスのファイルが、 git のルートからの相対パスがどうなっているかを取得するコマンドなどはありますでしょうか。これができると、たとえば github 上の該当ページを open する、といったような、もろもろのスクリプト作成が可能だろうと思い、質問しています。 解決 少し、調べたらでてきたので自己回答します。 git ls-files –full-name committed-file とやると、committed-file というファイルの、 git ルートからの相対パスが取得できました。 回答者: Anonymous

ある拡張子を持つファイルたち全てについてループするシェルスクリプト

投稿者: Anonymous POSIX shell (あるいは Dash) のシェルスクリプトにおいて .txt という拡張子を末尾に持つファイルたち全てに対して何らかの処理がしたいとき、どのように書けますか? たとえば全てのファイル名を出力するにはどうすれば良いですか? ただし、以下を全て満たしたいです。 ファイル名に空白が入っていても良い。 ファイル名に改行が入っていても良い。 ディレクトリは除きたい。それ以外はシンボリックリンクも含め全てそのまま扱いたい。 条件に合うファイルが無い場合、何もしない。 解決 glob を使ってファイルたちを見つけ出し、for 文を回せば良いです。 for file in *.txt ; do [ -f “$file” ] || continue # 実行したいコマンド echo “$file” done ディレクトリも含めたい場合は、-f でなく -e を使ってください。 以下、注意事項です。 この方法では .piyo.txt のようなファイルは捕捉されません。ドットから始まるファイルも捕捉したい場合、.*.txt というパターンを使うとマッチすることができます。 *.txt にマッチするファイルが無かった場合、$file には *.txt という文字列そのものが代入されてしまいます。しかし [ -f “$file” ] でそのファイルが存在しているかどうか確認しているので問題ありません。また Bash…(Continue Reading)

Linuxでの文字列削除

投稿者: Anonymous [[File:AAA.jpg]] [[Image:BBB.png|5MB|2015]] CCC.gif|1MB [[ファイル:DDD.svg|5MB]] 上記のような沢山のファイルの情報が記述されたテキストファイルがあります。このファイルを下記のようにしたいのですがやり方が分かりません。 AAA.jpg BBB.png CCC.gif DDD.svg 下記のコマンドでファイル名よりも前の文字を削除することは出来ましたが、ファイル名より後ろの文字の削除が出来ません。どうかご教授いただけませんでしょうか。 sed -i -e ‘s/[[Image://gi’ -e ‘s/[[File://gi’ -e ‘s/[[ファイル://gi’ -e ‘s/|*//g’ -e ‘s/]]//g’ filename.txt 解決 sedだけで済ませるなら例えばこんな感じで如何でしょうか。 sed -e ‘s/^[[//g’ -e ‘s/]]$//g’ -e ‘s/([^|]+)|.*/1/’ -e ‘s/.*:([^:]+)/1/’ filename.txt 回答者: Anonymous

ディレクトリにあるサイズの大きなファイル以外を一覧取得したい

投稿者: Anonymous ~/Downloadsフォルダに存在するファイルのうち10M以上のサイズのファイル以外をすべて一覧で取得したいです 可能ならば、~/Downloads/example-dir/*のように再帰的にすべてのファイルの一覧を取得したい 解決 文字通り「サイズ10M以上のファイル以外」であれば、こうですね。これではディレクトリなども含まれます: $ find ~/Downloads ! -size +10M 「サイズ 10M以下のファイル」なら: $ find ~/Downloads -size -10M -type f さらに「*.pdfのみ」という条件を加えるなら: $ find ~/Downloads -size -10M -type f -name “*.pdf” 回答者: Anonymous

shell script に対して tagging を行えるような tag システムはありますか?

投稿者: Anonymous 例えば、 C++ などであれば、 GNU Tags などがあって、これをエディタに組み込むなどによって function の索引を作成し、そこにジャンプすることができます。 shellscript に対して、同じことをやりたいと思いました。 https://www.gnu.org/software/global/ を見たいたのですが、 shell script は supported の項目に含まれていませんでした。 質問 shell script に対して tagging を行えるような tag システムはありますか? 解決 Exuberant Ctags は shellscript (Bourne/Korn/Z) に対応しています。 http://ctags.sourceforge.net/languages.html 回答者: Anonymous

シェルスクリプトで実行ファイルと同じ名前のバイナリーファイルを生成する方法

投稿者: Anonymous 現在はテキストをバイナリーファイルに変換するというプログラムはあるので、考え方として一度.pyファイルの実行結果をtxtファイルに入れ、txtファイルをバイナリーファイルに変換する。 for file in `find . -maxdepth 1 -type f`; do ./$file > a.txt cat a.txt |txt2bin.py -i ${file%.*} rm a.txt done しかし${file%.*}があってないのか、バイナリーファイルが生成しません。 実行ファイルの名前を使って新しいファイルを作る方法を教えていただけないでしょうか。 mjyさんが提案したset -xで確認したところ、例えばmmat.pyのとき、 + cat a.txt + txt2bin.py -i ./mmat と、ファイル名が./ついていることが気づきました。 なのでコードを以下のように書き換えました。 for file in `find . -maxdepth 1 -name “*.py”`; do ./$file > a.txt str=${file%.*} str2=${str##*/} cat a.txt |txt2bin.py…(Continue Reading)

スペースを含んだファイルパス存在するか確かめたい

投稿者: Anonymous ~/Library/Application Support/ のようにスペースを含んだファイルパスを $ path=”~/Library/Application Support/” $ [ -e “$path” ] && echo Found || echo Not Found のように存在するか判定したいのですが、これを実行すると Not Found とファイルおよびディレクトリが見つからなかったと表示されてしまいます。 スペースを含んだファイルパスが存在するかどうか確かめるうまい方法はありませんか 解決 test -e “$HOME/Library/Application Support/” これでどうでしょう。 回答者: Anonymous

シェルスクリプトでループの最後を判定する

投稿者: Anonymous 以下のようにフォルダ内のファイル名を5秒おきに列挙するシェルがあります。 for file in `ls /home/test/`; do echo “${file}” sleep 5 done 最後のファイル名を表示した後は5秒待機する必要がないので、ループの最後だけは sleep 5 を実行したくないのですが、どのように記述すれば良いでしょうか。 解決 絡め手ですが、echoの評価前に5秒スリープするようにします。 最初の1回はスリープしないようにしておけば、最後の1個の終了後 ループを抜けて終わります。 count=0 for file in `ls .`; do #最初の1回はスリープしない。 if [ $count -ne 0 ]; then sleep 5 fi echo ${file} ((count++ )) done 回答者: Anonymous

シェルの時間文字列(yyyymmddhhMM)を(yyyy-mm-dd hh:MM)のフォーマットに直したいですがうまくいかないです。

投稿者: Anonymous シェルの時間文字列(yyyymmddhhMM)を(yyyy-mm-dd hh:MM)のフォーマットに直したいですがうまくいかないです。 時刻を表現している文字列「201901010310」をdateフォーマッテング関数を使っても表示が出てくれません。 以下のコードで何が間違ってフォーマッティングがうまくいってないのかご指摘いただけますと幸いです。 nengou_i=201901010310 echo `date “+%Y-%m-%d %H:%M” –date “${nengou_i}”` 結果 20190101-03-10 00:00:00 本当は以下のように出したい。 2019-01-01 03:10 解決 nengou_iが数値のみでは20190101年の03月10日と解釈されてしまうので、時刻の前に空白を入れてあげる必要があります。 変数に代入するときに空白を入れることが出来ない場合、以前された シェルを使ってyyyymmdd形式の変数をunixtimeに変換したい。 という質問へのakira-ejiriさんの回答が役に立つと思います。 回答者: Anonymous

ファイル名に含まれるアンダーバー以降の数字の連続を削除したい

投稿者: Anonymous aaa01.txt bbb01.txt というファイルのあるフォルダで find ./ -type f | sed ‘p;s/01/02/’ | xargs -n2 mv とやると、 aaa02.txt bbb02.txt となります。 これを応用して aaa_0101.txt bbb_2201.txt を aaa.txt bbb.txt のようにするには、xargsのコマンドをどう変更したらよいですか? よろしくお願い致します 解決 sed の部分を変更して次のように実行します。 find ./ -type f | sed ‘p; s/_[0-9]*././’ | xargs -n2 mv 回答者: Anonymous

設定ファイルの文法エラーをチェックしてから、Nginx再起動

投稿者: Anonymous 「nginx -t」が正しかった場合のみ、「systemctl restart nginx.service」実行したいのですが、下記で合っていますか? $ sudo nginx -t && systemctl restart nginx.service 下記は、上記と何が違うのですか? ・それぞれ長所短所があれば教えてください sudo sh -c ‘nginx -t && systemctl restart nginx.service’ ・何れも、幾つでも連結可ですか? $ sudo コマンド && コマンド || コマンド || コマンド $ sudo sh -c ‘コマンド && コマンド || コマンド || コマンド’ 環境 ・CentOS7 ・Nginx 解決 試してみればすぐにわかることだとは思いますが、 $ sudo nginx -t…(Continue Reading)

シェルスクリプトのエンター入力の記述方法について

投稿者: Anonymous 以下で示すように、telnet接続をしてGETリクエストを送り、abc.html を取得するシェルスクリプトを作成しました。 この時、enterの部分はこのままだと”enter”と表記されるだけですが、実際のコマンドでは、ここはenterキーを押しています。 しかしシェルスクリプトでここをenterと記載しても勿論うまくいきませんし、改行コードのLFを入れても改行されるだけでenterキーを押したものと同じにはなりませんでした。 更に、echo””と入れてもうまくいきませんでした。echo ”/n”も駄目でした。 どなたかenterキーを押したのと同じ様にするにはどのようにすればいいか教えていただけませんでしょうか。 現状のシェルスクリプト #!/bin/bash echo “open x.x.x.x 80” sleep 2 echo “GET /abc.html HTTP/1.1” echo “HOST: x.x.x.x” echo “conection: keep-Alive” echo “enter” sleep 2 コメント回答 echo -e “n”と入れても、改行されるだけで、enterキーと同じ入力とはなりませんでした。 echo -e nとしてみてもecho -e “r”としても同様に改行がされるだけでした。 何が間違っておりますでしょうか。 解決 echo “” #で一回改行 echo -e “n” #で二回改行 だと思うんですけど。 いっそ yes “” でめっちゃ改行してみます? 回答者: Anonymous

testコマンドの文字列比較条件式で’==’は許容されているのか?

投稿者: Anonymous 細かい話ですが、testコマンドの文字列比較で、 $ test “${hoge}” = ‘aaa’ のように、=で一致しているかを評価するという説明は Manpageに載っています。一方で、 $ test “${hoge}” == ‘aaa’ でも一致しているかを評価できるという説明が見当たりません。 試してみると一致しているか評価できているので、 使えると思うのですが、何か推奨されていない理由があるのでしょうか? 解決 オイラんちにある HP-UX 11.11 の /bin/sh 上では $ test a = a && echo yes yes $ test a == a && echo yes sh: ==: A test parameter is not valid. となりました。一方でその HP-UX 11.11 上の bash…(Continue Reading)

source コマンドによる .bashrc の読み込みが別ターミナルに反映されないのはなぜ?

投稿者: Anonymous ターミナルで2つタブを開いて作業をしていました。片方のターミナルで.bashrcに変更を加え、source ~/.bashrcで変更を反映させました。しかし、もう片方のターミナルでその変更を確認すると変更がされていないとエラーが出ました。しかし、source ~/.bashrcをした方のターミナルで確認すると変更がされていることが確認できました。 なぜ2つ開かれたターミナルごとで結果が異なるのでしょうか? 解決 タブごとに異なるbashが並列に起動しているからです。 あるタブのbashでsourceした結果は並列して起動している別のタブのbashへは反映されません。 echo $$を実行すると起動しているbashのPIDが表示されるので、pgrepやpstreeなどでどういう風になっているのかを調べられると思います。 回答者: Anonymous

docker runでCMDとして与えた引数のスペースが正しく処理されない

投稿者: Anonymous 以下の様なDockerfileとdocker-entrypoint.shを作成してビルドしました。 Dockerfile FROM debian:latest COPY docker-entrypoint.sh /entrypoint.sh ENTRYPOINT [“/entrypoint.sh”] docker-entrypoint.sh #!/bin/sh echo ‘[email protected] = ‘[email protected] echo ‘$# = ‘$# OPT=`getopt -o “” -l “hoge:,huga:” — “[email protected]”` echo ‘$OPT = ‘$OPT やりたいこととしては、 docker run myimage –hoge=”ho ge” –huga=”hu ga” のようにオプションを指定できるようにし、entrypoint.shで処理できるようにしたいのです。 理想ではgetoptでオプションが整形され–hoge ‘ho ge’ –huga ‘hu ga’のような出力がされるはずなのですが、結果は [email protected] = –hoge=ho ge –huga=hu ga $# =…(Continue Reading)

指定した文字列どおりに対応する画像ファイルを結合するシェルスクリプト

投稿者: Anonymous a.png~z.pngまでの一文字のアルファベットのファイル名を持つ画像ファイルがあります。 文字列を渡して実行すると、指定したアルファベットの文字列の順番どおりに、対応する画像ファイルを結合して出力するシェルスクリプトを書きたいです。 実行例 ./createImage.sh zyxwv このように結合される convert +append z.png y.png x.png w.png v.png result.png どのように書けばいいのでしょうか。 詳しい方教えてください。 よろしくお願いいたします。 解決 ${変数#パターン} → 最少の前方一致部分を削除 ${変数%パターン} → 最少の後方一致部分を削除 を使って、文字が残っている間は1文字ずつ切り出して行くというやり方です。 #!/bin/sh chars=$1 test -z $chars && exit 1 command=”convert +append” while [ -n “$chars” ]; do rest=${chars#?} char=${chars%$rest} chars=$rest command=”$command $char.png” done command=”$command result.png” $command 回答者: Anonymous

2つのディレクトリ構造の共通部分を計算するには?

投稿者: Anonymous diff -r dir1 dir2 で、ディレクトリの構造的な diff を取得できますが、 逆に、ディレクトリの構造的な共通部分を知りたく成りました。 これは、どうやったら実現できますか? 解決 -s で、同じであったファイル情報が出力できることに気が付きました。 diff -rsq dir1 dir2 回答者: Anonymous

CURL で取得したテキストをスクリプトとして実行したい

投稿者: Anonymous Webにテキストデータとしてアップロードしたスクリプトを CURLで取得して実行したいです。 URL https://dl.dropboxusercontent.com/u/8763485/stackoverflow.sh 内容: echo ‘:)’ にアップロードしたテキストを curl でダウンロードして実行したいです 解決 ソース curl -sf https://dl.dropboxusercontent.com/u/8763485/stackoverflow.sh | sh -s 出力 🙂 これでいかがでしょうか 回答者: Anonymous

日本語を含んだテキストファイルをソートするには?

投稿者: Anonymous utf-8 のテキストファイルがあります。このファイルに対して sort コマンドを行っても、日本語がソートされないことに気が付きました。 % cat test.txt あ い う え お % cat test.txt | sort あ い う え お % cat test2.txt お え う い あ % cat test2.txt | sort お え う い あ 日本語を含んだテキストファイルをするには、どうしたらいいでしょうか。 解決 printf ‘おnえnうnいnあn’ | LC_ALL=ja_JP.UTF-8 sort とすると あ い う え お…(Continue Reading)

指定したファイルパスが存在するか確かめたい

投稿者: Anonymous ~/Desktop/animals/cat.txt が存在するかコマンドで確かめたい。 存在したら Found 存在しなかったら Not found を出力したいです 解決 ソース [ -e ~/Desktop/animals/cat.txt ] && echo Found || echo Not found 出力 Not found オプション -e ファイルかディレクトリが実在するか判定 -f ファイルが実在するか判定 -d ディレクトリが実在するか判定 -x 実行可能ファイルが実在するか判定 -r 読み込み可能か判定 -w 書き込み可能か判定 この書き方は 短絡評価 といいます 回答者: Anonymous

シェルスクリプトのfor文で配列変数を使いたい。

投稿者: Anonymous 配列変数をfor文に渡して、配列要素にアクセスしたいのですが、うまくいきません。 このようなアクセスはできないのでしょうか? list1=(aa bb) list2=(cc dd) for l in list1 list2 do echo $l[0]; echo $l[1]; done 実行結果 list1[0] list1[1] list2[0] list2[1] 期待する結果 aa bb cc dd 解決 「このようなアクセス」というのが indirect reference(間接参照)を意味するのであれば、bash でもできなくはないです。 list1=(aa bb) list2=(‘cc 123’ -n) for l in list1 list2 do eval printf ‘%s\n’ “${$l[1]}” eval printf ‘%s\n’ “${$l[0]}” done eval…(Continue Reading)

Jenkinsでジョブを実行した時、シェルを実行している権限は?

投稿者: Anonymous シェルスクリプトの中にNodeJsをインストールするコマンドが書いてあり、 Jenkinsのジョブを実行するとそのスクリプトが実行されます。 Jenkinsのジョブを使用して実行すると コンソール出力に下記のメッセージが出ていてNodeJsがインストールされません。 sudo: no tty present and no askpass program specified しかし、vncを使用して遠隔ログインしターミナルを立ち上げて シェルスクリプトを実行するとエラーが出ずインストールが完了します。 vncログインしたものと全く同じログインをしたユーザーの環境上で Jenkinsは起動しているのですが、Jenkins自体は別の権限?で動作しているのでしょうか? ■環境 MacOSX:10.10.3 【追記】 大事なことを書き忘れてました visudoで下記を追加はしたのですが失敗します。 $ sudo /usr/sbin/visudo ———————— # Defaults requiretty # tty無しの場合sudoさせない Defaults:jenkins !requiretty # ユーザjenkinsはtty無しでsudo可能 jenkins ALL=(ALL) NOPASSWD:ALL # ユーザjenkinsはパスワード無しでsudo可能 解決 Jenkinsのジョブはデフォルトだとjenkinsというユーザで実行されているようなので、jenkinsというユーザの権限を確認してみてください(デフォルトだとルート権限は無いと思います)。また、Jenkinsのジョブの実行ユーザはシェルの中でwhoamiコマンドを叩くなどすれば確認出来ます。 なお、該当エラーメッセージへの対処方法は以下が参考になると思います。 http://qiita.com/ykirishima/items/2f32dae7fa28a2b45801 回答者: Anonymous

alias の中で動的に実行したコマンド結果を使いたい

投稿者: Anonymous コマンドの結果を引数にしてコマンドを実行する alias を書きたいです 具体的には特定の name のついた ec2 に SSM ログインするコマンドを書きたいので aws ec2 describe-instances | jq -r ‘.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId’ このコマンド結果を最後につけて aws ssm start-session –target <ここに結果を入れたい> を実行する alias を作りたいです alias api-login="aws ssm start-session –target $(aws ec2 describe-instances | jq -r ‘.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId’)" と定義してしまうと定義時に中身が展開されてしまって api-login=’aws ssm…(Continue Reading)

posix システムにてパスワードを生成するには?

投稿者: Anonymous posix 規格に対してポータブルな、パスワード生成シェルスクリプトはどのようなものになりますか? パスワードは、ひとまずアルファベット(大文字・小文字)+数字で生成できればいいと考えています。 解決 乱数の生成には awk の rand() が使えます。 ただ、種の決定をどうするのがよいのか、自信がないです。 Directory Structure and Devices に /dev/urandom は無いですし、dateコマンドでナノ秒などを取得することもできないようです。 とりあえず以下では、秒までの時間とプロセスIDを使っています。 #!/bin/sh seed=$(( $(date +%y%j%H%M%S) + $$)) awk -v seed=”$seed” -f – <<__AWK__ BEGIN{ len = 20 chars = “1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz” srand(seed) chars_num = length(chars) for (i=0; i<len; ++i) { c = int(rand() * chars_num) + 1…(Continue Reading)