Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all 2885 articles
Browse latest View live

bashでパッケージがインストールされているか調べる方法

$
0
0

注意

ArchLinuxとDebian(pacmanとapt)しか書いていません。(筆者がこれしかわからない)
pacman -Qの部分を変更すればyumなどでも使用できると思います。
ディストリビューションに関係なくbashです。
今回はnanoがインストールされているか調べることにします。
(変数pkgの値を変更すれば他のパッケージも調べられるようにしてあります。)

ArchLinux

pkg=nano
if[[-z$(pacman -Q | awk'{print $1}' | grep-x$pkg)]];then
    echo"$pkg is installed."else
    echo"$pkg is not installed."fi

Ubuntu

pkg=nano
if[[-z$(dpkg --get-selections | awk'{print $1}' | grep-x$pkg)]];then
    echo"$pkg is installed."else
    echo"$pkg is not installed."fi

コマンド一つでWSLとエクスプローラーのディレクトリを同時に移動する

$
0
0

こちらで開発した eopen-ecdの新機能の紹介です。どんな機能かは以下のデモ動画で

demo.gif

ecdは前バージョンではエクスプローラーのディレクトリにターミナルのディレクトリを移動するコマンドだったのですが、考え方を変えて両方のディレクトリを同時に移動するコマンドに変更しました。:で始まる特殊なパスを使うことで、前と同じようにエクスプローラーのディレクトリに移動することもできます。(Windows側のホームディレクトリを意味する ~~で始まるパスも用意しています。)

ecdコマンドは cdコマンドの代わりとして使用することができます。ターミナルとは別ウインドウで現在のディレクトリ一覧をバックグラウンドで表示することができるので、cdで移動した後 lsでファイル一覧を確認する必要はなくなり、ターミナルとエクスプローラーの間でディレクトリをいちいちコピペやドラッグアンドドロップして移動する必要もなくなります。

あとタイトルはWSLとなっていますが(私がメインで使うのはWSLなので)、PowerShellとコマンドプロンプトにも対応しています。

Node.js 簡単な応答バッチ処理

$
0
0

はじめに

Node.jsでyまたはnの応答に従い、バッチ処理を実行するJavaSciptのサンプルを作成しました。
この辺、Promiseとasync/awaitなどを利用して対話的に同期処理を実行すると分けがわからなくところです。
初学者向けと自らの備忘録で掲載します。

前提

バッチ処理リスト

  • batchlist.json
[{"msg":"★ ★ リストを確認します。(ls) 実行 = y, 中止 = n ★ ★","con":"y","can":"n","cmd":"ls"},{"msg":"★ ★ パスを確認します。(pwd) 実行 = y, 中止 = n ★ ★","con":"y","can":"n","cmd":"pwd"}]

JSON項目説明

項目説明
msg応答文、実行と中止を定義
con実行(continu)の文字列を定義
can中止(cancel)の文字列を定義
cmd実行するコマンド(command)を定義

バッチ処理スクリプト

  • Dobatch.js
constexec=require('child_process').execFileSync;constfs=require('fs');constjson=JSON.parse(fs.readFileSync('./batchlist.json','utf8'));// コンソール標準入出力constrl=require("readline").createInterface(process.stdin,process.stdout);constgets=()=>newPromise(res=>rl.once("line",res));/**
 * コマンドラッパー(同期処理)
 * @param {String } cmd - コマンド
 */functionsh(cmd){try{console.log(exec(cmd,{shell:true}).toString());}catch(error){console.log(error.stderr.toString());}}// バッ処理実行(asyncfunction(){for(vari=0;json.length>i;i++){console.log(json[i].msg);str=awaitgets();if(str==json[i].con){console.log(json[i].cmd);sh(json[i].cmd);}elseif(str==json[i].can){process.exit();}else{console.log(str+"は入力不正です。")i--;}}process.exit();})();

説明

  • コマンド実行はchild_processのexecFileSyncを利用して同期処理
  • JSONの読み出しもfsのreadFileSyncを利用して同期処理
  • 残るは、コンソールからの入出力応答をPromoiseとasync/awaitで同期処理
    gets関数で定義

実行

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\~>bash --version ...①
GNU bash, version 4.4.12(2)-release(x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
PS C:\Users\~>bash ...②
USER MINGW64 ~/
$ node Dobatch.js ...③
★ ★ リストを確認します。(ls)実行 = y, 中止 = n ★ ★
y
ls
batchlist.json
Dobatch.js

★ ★ パスを確認します。(pwd)実行 = y, 中止 = n ★ ★
y
pwd
/c/Users/~/


USER MINGW64 ~/
$

説明

① bashのバージョン確認
② PowerShellからbashへ切替え
③ Dobatch.jsの実行

※ 実行で表示されるパスは出力を編集して表示しています。

まとめ

Node.jsのコンソールからの標準入力がめんどくさい、VBのMsgBox的なコーディングをしようとして悪戦苦闘した記憶がありました。ファイルの読み込みとコマンド実行を同期処理にすれば、以外と簡単にできると思います。たぶレスポンスはいまいちだと思います。
色々なシステム導入ツールがあると思いますが、JSONファイルのバッチ定義で簡易システム導入ツールとしてご利用してみてください。ただし、参考までに、例によって一切のご利用はあくまでも自己責任でお願いします。

カクヨムの傍点記法を、小説家になろう向けの中黒ルビに変換するシェルスクリプト

$
0
0

とりいそぎコードのみ。

kaku2narou.sh
for textfile in$(grep-lE'《《[^》]+》》'*);do#該当記述を含むファイルを検出for hit in$(grep-Eo《《[^》]+》》 "${textfile}");do#ファイルごとに該当記述を検出phrase=$(echo-n"${hit}" | sed-e's/^《《//'-e's/》》$//')#傍点部付きの文字列を検出cn=$(echo-n"${phrase}" | wc-cm | grep-Eo'\d+')#文字列の文字数をカウントdots=$(printf'%*s'"$cn" | sed-e's/ /・/g')#中黒を並べる
    gsed -i-e"s/${hit}/|${phrase}${dots}》/""${textfile}"#置換するdone
done

上記のコードの場合、《《ぼうてんぶ》》|ぼうてんぶ《・・・・・》のような形に変換する。

ただし、小説家になろうでは10文字を超える連続ルビが使用できない。

そこで、原稿のメンテナンス性を無視して、|ぼ《・》|う《・》|て《・》|ん《・》|ぶ《・》のような形に変換するコードが以下。

kaku2narou.sh
for textfile in$(grep-lE'《《[^》]+》》'*);do
  for hit in$(grep-Eo《《[^》]+》》 "${textfile}");do
    phrase=$(echo-n"${hit}" | sed-e's/^《《//'-e's/》》$//')nphrase=$(echo-n"${phrase}" | gsed -E-e's/(.)/|\1《・》/g')
    gsed -i-e"s/${hit}/${nphrase}/""${textfile}"done
done

変数がきちゃない。
あと変数名をちゃんと{}でくくらないとバグってびびった。

bashで"を二重で使う方法

$
0
0

やりたいこと

echoでsed "${line},10d" hoge.txtと出力したい

問題点

# これだと""が思い通りに解釈されないecho"sed "${line},10d" hoge.txt"# これだと変数が展開されないecho'sed "${line},10d" hoge.txt'

対処方法

海外の記事にあったけどなんかしっくりこない。
誰かいい方法合ったら教えてください。
"を変数に代入すればいいらしい。

dqt='"'echo"sed ${dqt}${line},10d${dqt} hoge.txt"

ShellScriptでじゃんけんゲームを作成

$
0
0

この記事の目的

  • ShellScriptの学習
  • じゃんけんゲームのロジックのサンプルとして共有
  • 他にいいロジックがあるか知りたい
  • じゃんけんゲームを始めて作ったので振り返ってみる

やりたいこと

  • じゃんけんゲームをShellScript(Bash)で実装
  • 対話式でじゃんけんを行う
  • コンピュータ側の手はランダムで決定
  • 先取制にする(ex.3回戦だったら2勝でじゃんけん終了)

参考にさせていただいた問題
http://g-network.boo.jp/wiki/2018/02/post-909/

実行環境

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)

ソース

#!/bin/bashreadonly GAME_TIMES=5       #何本勝負かreadonly FIRST_TO_GET_CNT=$((${GAME_TIMES}/2+1))#先取数#手の数字を名前に変換する
handcode_to_name (){case$1in
    0)echo“グー” ;;
    1)echo“チョキ” ;;
    2)echo“パー” ;;esac}game_count=1                #現在何番戦かplayer_win_cnt=0            #プレイヤー勝利数cpu_win_cnt=0               #CPU勝利数aiko_flg=false#あいこかどうかのフラグ#処理開始echo"じゃんけんを開始します。${GAME_TIMES}本勝負、${FIRST_TO_GET_CNT}勝先取です。"sleep 2

#勝負本数まで かつ プレイヤー/CPUが勝数先取するまでループする。while[${game_count}-le${GAME_TIMES}-a\${player_win_cnt}-lt${FIRST_TO_GET_CNT}-a\${cpu_win_cnt}-lt${FIRST_TO_GET_CNT}];do
 if!${aiko_flg};then
    echo"${game_count}回戦目です"sleep 2
  fi
  echo"数字を選んでください。 0:グー 1:チョキ 2:パー"is_vaild_player_hand=false
  loop_cnt=0
  # プレイヤーの手を読み取るwhile[!$is_vaild_player_hand-o${loop_cnt}-eq 0 ];do
    read input
    if[[!${input}=~ ^[0-2]$ ]];then
      echo"0 1 2のいずれかの数字を入力してください。"is_vaild_player_hand=false
      continue
    fi
    is_vaild_player_hand=true
    loop_cnt=$((${loop_cnt}+1))done

  player_hand=${input}cpu_hand=$(($RANDOM%3))echo
  sleep 2

  # 勝敗判定if[${player_hand}-eq${cpu_hand}];then
    echo"あなたの手は`handcode_to_name ${player_hand}`でした。"echo"コンピュータの手は`handcode_to_name ${cpu_hand}`でした。"echo"あいこなので再選択してください。"echo
    aiko_flg=true
    continue
  elif[$(((${player_hand}-${cpu_hand}+3)%3))-eq 2 ];then
    echo"あなたの手は`handcode_to_name ${player_hand}`でした。"echo"コンピュータの手は`handcode_to_name ${cpu_hand}`でした。"echo"あなたの勝ちです"player_win_cnt=$((${player_win_cnt}+1))game_count=$((${game_count}+1))aiko_flg=false
  elif[$(((${player_hand}-${cpu_hand}+3)%3))-eq 1 ];then
    echo"あなたの手は`handcode_to_name ${player_hand}`でした。"echo"コンピュータの手は`handcode_to_name ${cpu_hand}`でした。"echo"あなたの負けです"cpu_win_cnt=$((${cpu_win_cnt}+1))game_count=$((${game_count}+1))aiko_flg=false
  fi

  echo"現在${player_win_cnt}${cpu_win_cnt}敗"echo
  sleep 2
done

echo"あなたは${GAME_TIMES}回中${player_win_cnt}勝ちました。"#${player_win_cnt} > ${cpu_win_cnt}if[${player_win_cnt}-gt${cpu_win_cnt}];then
  echo"${player_win_cnt}${cpu_win_cnt}敗であなたの勝ちです!"elif[${player_win_cnt}-eq${cpu_win_cnt}];then
  echo"${player_win_cnt}${cpu_win_cnt}敗で引き分けです"else
  echo"${player_win_cnt}${cpu_win_cnt}敗であなたの負けです..."fi

苦労した点や感想など

  • 勝敗判定は(自分の手 - 相手の手 + 3) % 3で実装した1
  • まだ比較演算子の書き方が慣れない...
  • bool値の比較方法と正規表現に苦戦

Ubuntuのデスクトップ壁紙をシェルから変更

$
0
0

Gsettingsを使ってデスクトップ壁紙を変更

何かのきっかけでスクリプトから壁紙を変更したくなることもあるかと。

背景色を黒く

gsettings set org.gnome.desktop.background primary-color 000000

背景ビットマップ指定パスをを消す(デフォルト背景に変わる)

gsettings set org.gnome.desktop.background picture-uri none         

背景色表示に切り替える(上記の結果、「黒く」なる)

gsettings set org.gnome.desktop.background picture-options 'none'   

背景ビットマップ指定パスを設定(まだ背景は表示されない)

gsettings set org.gnome.desktop.background picture-uri "file:///home/ubuntu/new_wall_paper.png"         

背景ビットマップ表示モードを設定(ここで初めて背景が表示される)

gsettings set org.gnome.desktop.background picture-options 'scaled' 

rsyncでグローバルの除外リストを設定する

$
0
0

rsyncを使っているときに,大体どんなプロジェクトでも共通して無視したいファイルがあるのでそれを設定する.

自分はfishを使っているので設定に以下の aliasを追加する.ホームディレクトリに .rsyncignoreがあればそれを読み込んでくれる.

  • bash / zshの場合
if[-e ~/.rsyncignore ];then
  alias rsync="rsync --exclude-from ~/.rsyncignore"fi
  • fishの場合
# rsync global excluding settingif test-f ~/.rsyncignore
  alias rsync "rsync --exclude-from ~/.rsyncignore"
end

rsyncでは --exclude-fromでファイルを渡すことで除外リストを設定できる.このとき,ファイルの記述形式は各行が--exludeに渡されるものと思えば良い.(.gitignoreとかと同じように書けばだいたい大丈夫)

--exludeと同様,--exclude-fromも複数指定できるので,ローカルの除外リストをさらに付け加えても支障はない.

rsync -auv--dry-run--exclude-from ./rsyncignore.local from/ to/

bashでパスワード自動生成

$
0
0

パスワードを一括生成してコピペしたいことがあったのでメモ

サンプル

数字8桁で先頭が0でない文字列を10個生成

コマンド

$ cat /dev/urandom | tr -dc '0123456789' | fold -w 8 | grep -v '^0' | head -n 10

実行結果

74101604
15854326
24370649
78490829
36276057
70422352
94393920
82691490
34135561
48386263

数字/英小文字/英大文字/記号12桁で必ず記号を含む文字列を10個生成

コマンド

$ cat /dev/urandom | tr -dc '0123456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ,.+\-!' | fold -w 12 | grep -E '[,\.+\-\!]' | head -n 10

実行結果

zD,JXJdHQ,gC
15zwLb7HVh,W
3CG,64,,yQbR
XX7E.ejM9.R,
ebysijGSpfZ,
,XHtcyi4G.UN
Y38MX3c.bhnp
w4,dRUjrpby!
JJUrH3eW5H,r
.WWDp84.w5Ds

shellscript化

$ cat generate_password.sh
#!/bin/bash

# 引数チェック
if [ $# -ne 1 ]; then
  echo "Usage:sh generate_password.sh password_num"
  echo "Example:sh generate_password.sh 10"
  exit 1
fi

# 生成したい数
generate_num=$1

# 数字8桁で先頭が0でない文字列を引数の数だけ生成
cat /dev/urandom | tr -dc '0123456789' | fold -w 8 | grep -v '^0' | head -n ${generate_num}
$ sh generate_password.sh 10
74948144
55446718
50202090
54395135
40939495
78852681
71060205
39155894
19875823
24833084

CANログから特定フレームだけを取り出す

$
0
0

毎度、巨大なCANのログファイルをエディタで開いて、正規表現でgrep検索して、特定フレームを抽出するのが面倒だったので、指定したフレームだけを引っこ抜くスクリプトを作った。(ログファイルの形式次第では変更が必要かもしれない。)
そのまま実行しても標準出力として出力されるだけなのでリダイレクトしてください。
まぁ、Qiita見てるような方は既に自己解決していると思いますがw

#!/bin/bash# CANLogファイルを指定FILE=# 抽出したいフレームを指定FRAMES=("""")cat$FILE | while read line;do
    for frame in"${FRAMES[@]}";do
        if[[$line=~ $frame]];then
            echo$linefi
    done
done

参考までに、CANログって大体こんな感じ。(適当にネットから拾ってきたものです。)

   0.003586 1  F9              Rx   d 8 00 DA 40 33 D0 63 FF 1C  Length = 228000 BitCount = 118 ID = 249
   0.003738 1  1CF             Rx   d 3 00 00 05  Length = 144000 BitCount = 76 ID = 463
   0.003976 1  711             Rx   d 8 00 23 00 7E FF EB FC 6F  Length = 230000 BitCount = 119 ID = 1809
   0.004148 1  1D0             Rx   d 4 00 00 00 00  Length = 164000 BitCount = 86 ID = 464
   0.004382 1  C1              Rx   d 8 30 14 F6 08 32 B4 F7 70  Length = 226000 BitCount = 117 ID = 193
   0.004615 1  C5              Rx   d 8 31 27 F8 44 32 B0 F8 5C  Length = 224121 BitCount = 116 ID = 197
   0.004825 1  BE              Rx   d 6 00 00 4D 00 00 00  Length = 202242 BitCount = 105 ID = 190
   0.005051 1  D1              Rx   d 7 80 00 BF FE 00 FE 00  Length = 218121 BitCount = 113 ID = 209
   0.005292 1  C9              Rx   d 8 80 2C 5A 60 00 00 18 00  Length = 232242 BitCount = 120 ID = 201
   0.005538 1  1C8             Rx   d 8 80 00 00 00 FF FE 3F FE  Length = 238121 BitCount = 123 ID = 456
   0.005774 1  18E             Rx   d 8 00 00 00 84 78 46 08 45  Length = 228242 BitCount = 118 ID = 398

tarコマンドが覚えにくい理由の考察

$
0
0

 最近、ようやくtarコマンドのオプションを調べずに使えるようになってきた。その際、覚えられなかった理由が浮かび、何か役立つかもしれないと思ったので、まとめ、書き留めて置く。

覚えにくかったと思われる理由

オプションが必須

目的に従い、「作成(c)」「取り出し(x)」「表示(t)」等とそれぞれ個別で覚える必要がある。つまり、覚えることが多い。

オプションの意味がわからずに使うことが多い

tarのコマンドの使い方が紹介されているサイトに記載してあるサンプルはどういうわけか、オプションの「-」を省略しているものが多く、結果的にオプションの意味を理解せずに使うことになりやすい。

例えば、tarファイルを作成する場合

tar-czf{作成ファイル名}{対象ファイルリスト}

これをみて、オプションの-f{作成ファイル名}を指定していて、オプション-c, -zが操作を示しているとまず読み取れない。

実際、以下の方が頭に入りやすいのではと思う。

tar-c-z-f{作成ファイル名}{対象ファイルリスト}または 
tar-f{作成ファイル名}-cz{対象ファイルリスト}

ロングオプションだとよりわかりやすい

tar--create--gzip--file{作成ファイル名}{対象パスのリスト}

他よく使うオプションも比較

# 取り出しtar-xf{対象ファイルパス}tar-x-f{対象ファイルパス}tar--extarct--file{対象ファイルパス}# リスト表示tar-tvf{対象ファイルパス}tar-tv-f{対象ファイルパス}tar--list--verbose--file{対象ファイルパス}
補足
  • tarのマニュアルに以下のような記載があることから、ロングオプションでは動かない場合があるかもしれません

There are alternative long options for many of the short options that are deliberately not documented.
短いオプションの殆どは、意図的に文書化されていない代替の長いオプションがあります

ファイル指定方法がオプションと他コマンドと毛色が異なっている

例えば、mv,cp,mkdirコマンドは下記のように引数で指定

mv{変更対象パス}{変更後パス}cp{コピー元パス}{出力先パス}mkdir{作成ディレクトリ名}

これに対し、tarコマンドはオプション-fで指定

# tarファイル作成tar-f{作成ファイル名}-cz{対象パスリスト}# tarファイルの解凍tar-f{対象ファイル}-xz

どうやって覚えたか

下記順序で覚えた。
1. オプションの-fは基本的にどの操作でも必須なことを覚える
2. オプションの-fの意味と使い方を覚える
3. マニュアルから、他オプションの意味を覚える

自分のMacBookのOSをCatalinaにアップデートしたので、Zsh対応をした

$
0
0

はじめに

最近、ようやく自分のMacBookのOSをCatalinaにアップデートしました。
Catalinaでデフォルトシェルが「Zsh」になることを知っていたので、それに伴って色々動かなくなるんじゃないかと様子見していましたが、それなりに時間も経過したと思うので、実験の意味も含めてアップデートしました。

対応内容

~/.bash_profileの内容を~/.zprofileにコピペ

~/.bash_profileには、元々Android SDKなどのパス設定を行っていました。

~/.bash_profile
export ANDROID_HOME=/Users/Hitoshi/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/28.0.3
export PATH="/usr/local/sbin:$PATH"ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle
NDK=$ANDROID_NDK_ROOTexport PATH=${PATH}:$NDKexport PATH=$HOME/.nodebrew/current/bin:$PATHexport PATH=/Library/TeX/texbin:$PATHexport PATH=~/.local/bin:$PATHexport PATH=~/flutter/bin:$PATHexport JAVA_HOME=$(/usr/libexec/java_home -v 1.8)export PATH=${PATH}:$JAVA_HOME/bin

source ~/.bashrc

これに関しては、~/.zprofileを新規作成し、そこにsource ~/.bashrcより上の内容をコピペするだけでOKでした。

~/.zprofile
export ANDROID_HOME=/Users/Hitoshi/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/28.0.3
export PATH="/usr/local/sbin:$PATH"ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle
NDK=$ANDROID_NDK_ROOTexport PATH=${PATH}:$NDKexport PATH=$HOME/.nodebrew/current/bin:$PATHexport PATH=/Library/TeX/texbin:$PATHexport PATH=~/.local/bin:$PATHexport PATH=~/flutter/bin:$PATHexport JAVA_HOME=$(/usr/libexec/java_home -v 1.8)export PATH=${PATH}:$JAVA_HOME/bin

Gitコマンド対応

以下を参考に、コマンド補完&ブランチ名表示を行うようにしました。

Git - ZshでGitを使う

~/.zshrc
autoload -Uz compinit && compinit
autoload -Uz vcs_info
precmd_vcs_info(){ vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
# RPROMPT=\$vcs_info_msg_0_PROMPT=\$vcs_info_msg_0_'%# '
zstyle ':vcs_info:git:*' formats '%b'

すると、以下のように%の後ろにブランチ名が表示されるようになります。

スクリーンショット 2019-11-13 23.47.07.png

が、%の前が何も表示されなくなってしまってイマイチ。。
まだZshについてあまり分かっていないので、誰かいい感じの設定方法あれば教えてください。。

参考

新macOS Catalina が zsh を標準にするって聞いたので Mojave のまま移行してみた - Qiita

macOSのターミナルでパスワードを作成する方法

[Linux Tips] バックグラウンドでコマンド実行するには

$
0
0

知ってるよって方が大半、百番煎じくらいかと思いますが、主として内輪向けに・・・

単にバックグラウンドで動かしたい場合

最後に&を付与します。

user@user-VirtualBox:~$sleep 1000 &
[1] 20723
user@user-VirtualBox:~$

もしくは、Ctrl-Zで一時停止してから、bgしてやります。

user@user-VirtualBox:~$sleep 1000
^Z
[1]+  停止                  sleep 1000
user@user-VirtualBox:~$bg[1]+ sleep 1000 &
user@user-VirtualBox:~$

出力が鬱陶しければ、リダイレクトを使いましょう(割愛)。

端末を閉じても動かし(続け)たい場合

nohupを使います。

user@user-VirtualBox:~$nohup sleep 1000 &
[1] 20736
user@user-VirtualBox:~$nohup: 入力を無視し、出力を 'nohup.out'に追記します

見ての通り、出力はnohup.outになされるため、こちらはリダイレクト不要です。

LinuxでOSの種類・バージョンを確認する


複数ZIPを各ディレクトリに解凍するワンライナー

$
0
0

ZIPファイル名にドットが1つしか含まれていないという前提

for i in`ls*.zip | awk-F.'{print $1}'`;do unzip $i.zip -d$i;done

awkでUnixタイムスタンプに変換

$
0
0
echo"1410325425" | awk'{print strftime("%Y/%m/%d %H:%M:%S",$0)}'# 2014/09/10 14:03:45

UNIX(LF)⇔Windows(CRLF)改行コード変換

$
0
0

UNIX⇒Windows

# 上書きされる
unix2dos file

Windows⇒UNIX

# 上書きされる
dos2unix file

sudo時に環境変数を読み込む

Bashのカーソル移動、削除ショートカット

$
0
0

自分用メモ

カーソル移動

キー操作内容
Ctrl+f1文字進む
Ctrl+b1文字分戻る
Ctrl+a行頭に移動
Ctrl+e行末に移動
Esc+fスペース区切りで1単語分進む
Esc+bスペース区切りで1単語分戻る

文字削除

キー操作内容
Ctrl+h前1文字削除
Ctrl+dカーソル位置の1文字削除
Ctrl+wカーソル位置からスペース区切りで1単語分削除
Ctrl+kカーソル位置から行末までを削除
Ctrl+uカーソル位置から行頭までを削除
Viewing all 2885 articles
Browse latest View live