この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ja:bash [2017/08/30 04:03] kota |
ja:bash [2017/08/30 04:12] (現在) kota |
||
---|---|---|---|
ライン 5: | ライン 5: | ||
* [[:ja:bash:stdouterror|標準出力・標準エラー出力]] | * [[:ja:bash:stdouterror|標準出力・標準エラー出力]] | ||
- | * | + | * [[:ja:bash:WantToDo1|scriptがあるディレクトリの絶対パスをとる]] |
- | + | * [[:ja:bash:WantToDo2|1日前の日付を取得]] | |
- | + | * [[:ja:bash:WantToDo3|aliasの一時解除]] | |
- | ===== 標準出力・標準エラー出力 ===== | + | * [[:ja:bash:WantToDo4|連番ファイルの後半だけ削除]] |
- | + | * [[:ja:bash:WantToDo5|変数から一部を抜き出す]] | |
- | File Descriptorは | + | * [[:ja:bash:WantToDo6|macでsshのホスト名の補完など: bash-completion]] |
- | * 標準出力 : 1 | + | * [[:ja:bash:WantToDo7|変数を使って連番を生成]] |
- | * 標準エラー出力 : 2 | + | |
- | + | ||
- | ===== scriptがあるディレクトリの絶対パスをとる ===== | + | |
- | + | ||
- | <code bash> | + | |
- | FILE_DIR=$(cd $(dirname $BASH_SOURCE); pwd) | + | |
- | </code> | + | |
- | * $BASH_SOURCE : scriptの絶対パス | + | |
- | * cd しているが、scriptの処理が終わった後には元のdirectoryに戻っている | + | |
- | + | ||
- | ===== 1日前の日付を取得 ===== | + | |
- | + | ||
- | <code bash> | + | |
- | date -d '1 days ago' | + | |
- | </code> | + | |
- | + | ||
- | とする。1をNに変えれば、N日前。 | + | |
- | + | ||
- | ===== aliasの一時解除 ===== | + | |
- | + | ||
- | \lsのように、コマンドの前に"\"をつければ良い。 | + | |
- | + | ||
- | + | ||
- | ===== 連番ファイルの後半だけ削除 ===== | + | |
- | + | ||
- | file_0.txt\\ | + | |
- | file_1.txt\\ | + | |
- | ・\\ | + | |
- | ・\\ | + | |
- | ・\\ | + | |
- | file_99.txt\\ | + | |
- | があるうち、50−99までを削除したいとする。 | + | |
- | + | ||
- | ''ls -v file_* | tail -n 50 | xargs rm '' | + | |
- | + | ||
- | * ''ls -v file_*'' で数字順にls出力 | + | |
- | * ''| tail -n 50''で前の出力の後ろ50を切り出す | + | |
- | * ''| xargs rm''で前の出力をパラメータとして受け取り、rmに渡している | + | |
- | + | ||
- | + | ||
- | はじめ、lsがaliasされてうまくいかなかったが"\ls"としてやるとうまくいった。 | + | |
- | + | ||
- | + | ||
- | ===== 変数から一部を抜き出す ===== | + | |
- | + | ||
- | ''${PARNAME:OFFSET:LENGTH}'' | + | |
- | + | ||
- | によって変数の中から、指定した箇所(Offset)からある文字数(length)だけを抜き出してくることができる。\\ | + | |
- | 例: | + | |
- | <code bash> | + | |
- | HOGE="abc123def" | + | |
- | ## 頭から3文字を抜き出して新しい変数FUGE1に詰める | + | |
- | FUGE1=`echo ${HOGE:0:3}` | + | |
- | ## 2文字目から最後までを抜き出す(LENGTHを省略すると最後まで指定したことになる) | + | |
- | FUGE2=`echo ${HOGE:1}` | + | |
- | </code> | + | |
- | + | ||
- | ---- | + | |
- | ===== macでsshのホスト名の補完など: bash-completion ===== | + | |
- | + | ||
- | [[http://qiita.com/kotarella1110/items/34ba059d076f4148bebc|こちらのサイト]]を参考にさせてもらった。 | + | |
- | <code bash> | + | |
- | sudo port install bash-completion | + | |
- | </code> | + | |
- | でインストール。 | + | |
- | + | ||
- | これだけでは動かなくて、あと数ステップ必要だった。 | + | |
- | + | ||
- | * .bash_profileの末尾に以下を追加 | + | |
- | <code bash> | + | |
- | if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then | + | |
- | . /opt/local/etc/profile.d/bash_completion.sh | + | |
- | fi | + | |
- | </code> | + | |
- | + | ||
- | * Terminal.appの設定変更 | + | |
- | * "ターミナル" > "環境設定" > "プロファイル" > "シェル" で"コマンドを実行"にチェックを入れ"/opt/local/bin/bash -l"を入力 | + | |
- | * mac port で入れたbashを起動させるように設定 | + | |
- | * "ウインドウを閉じる前の確認"のリストに"bash"を追加 | + | |
- | * ↑実はこれをしなくても、代わりに"ターミナル" > "環境設定" > "一般" で"開くシェル"を"コマンド"で"/opt/local/bin/bash"としておけば良い。 | + | |
- | + | ||
- | ===== 変数を使って連番を生成 ===== | + | |
- | 例えば1から10までの連番を生成してループを回したい時、 | + | |
- | <code bash> | + | |
- | for i in {1..10} | + | |
- | do ... | + | |
- | </code> | + | |
- | の様にして連番生成、ループ処理を行うことができるが、この範囲を変数として | + | |
- | <code bash> | + | |
- | Start=1 | + | |
- | End=10 | + | |
- | for i in {${Start}..${End}} | + | |
- | do ... | + | |
- | </code> | + | |
- | としてもiに{1..10}という文字列が格納されるだけで、展開されて連番を生成してくれない。 | + | |
- | + | ||
- | こんな時は、以下の様に"eval echo " を使う。 | + | |
- | <code bash> | + | |
- | Start=1 | + | |
- | End=10 | + | |
- | for i in `eval echo {${Start}..${End}}` | + | |
- | do ... | + | |
- | </code> | + | |
- | これで、先のように1から10までの連番が生成される。 | + | |