それっぽい技術メモ

UNIXからpythonまで、技術系メモ。知識は人類の共有財産です。

Bashのエラーコードの話 RC 127はパスが通ってないよ

Cモジュールを修正、リコンパイルして実行したところ、戻り値が127だって。
ソース中ではRC=127で記述していなかったので、きっとbashが返してるはず。
というわけで調べてみると、どうやらLD_LIBRARY_PATHでlibのパスが通ってなかったことが判明。

代表的な戻り値はこんな感じ。
 ・127 :パスが通ってないよ。
 ・139 :segmentation fault(メモリーエラー)

bashが返すエラーコードは128を超えると、128 + シグナル を返します。
シグナルは、>|| kill -l ||< で確認できます。こんな感じ。

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2


Excelのセル内改行、一括削除

テストデータ、いろんな文字コードまたいでいるうちに、気が付けば1行ごとに改行コードが入ってしまった事件!
それも、csv!!
すべての改行コードを消しちゃうと、N行が1行になってしまうので、それは使えない。
という時に覚えた便利なExcelテクニック。

一括置換しようにも改行コードが入力できないっぽく見えるけど、検索する文字列にCtl + j を入力すると、ぱっと見わかりにくいけど、
実は改行コードが入力できます。
これでcsvのデータ内の改行コードも一括置換で削除、完了!

それでもダメなときがたまにあるけど、そんな時は隣にワーク列を作って=clean(セル) の関数を入れてあげると、
改行コードが削除できます。
で、値貼り付けで元の列に戻してあげれば、all ok.


Windowsのバッチで、$?みたいに直前のコマンドの戻り値を確認する ERRORLEVEL

LinuxUnixだと、シェルで直前に実行したコマンドの戻り値、リターンコードを取得する場合は、

echo $?

で求めるけど、Windowsだと?
ってバッチ書いてて必要に駆られて調べました。

echo %ERRORLEVEL%

で同じように、直前のコマンドの戻りを取得できるそうな。
そこそこバッチは書いてきたけど、なかなか必要なタイミングがなかったので、
まったく知らんかった。


対話型を対話しないLinux expect de scp

リプレイス前は、サーバ間で共有ディスクをそれぞれマウントしていたので、cpコマンドでサクッとコピーができたけど、AWSに持っていったらそれぞれのサーバにEBSでディレクトリがきられてる!

コピーコマンド使えない!!

で、scpを使ってみました。

コピー元でシェルを動かすので、こんなコマンドでサクッとコピー。

scp -P 10022 /home/test/sec-cp.dat test@192.168.1.1:/tmp/sec-cp.dat

scpはsshのポートを使うので、オプション -P でポート番号10022を指定しています。

コピー元が /home/test/sec-cp.dat

コピー先が test@192.168.1.1;/tmp/sec-cp.dat

コピー先のユーザはtestです。

でも、困った事が。

scpは対話型コマンドなので、実行すると?

password:?って聞いてくる。

.....

しょうがないので、expectを使ってみました。

expect -c "
spawn scp -P 10022 /home/test/sec-cp.dat test@192.168.1.1:/tmp/sec-cp.dat
expect "passwd:"
send "passworddesu¥n"
"

spawnに続いて、実行したいコマンドを。

expectに続いて、対話で表示される文字列を入力します。

尚、spawnで実行したコマンドがエラー吐くと、

 

spawn_id: spawn id exp6 not open

って言われます。


RedHat Enterprise Linux のバージョン確認

OSのバージョンってふとしたタイミングで確認した時がある。

とりあえず uname -aとか打ってみるけどわからない。

で調べた結果が、これ。

RedHat Enterprise Linux では、これ。

>cat /etc/redhat-release

>RedHatEnterpriseLinux Release 7.4 (Maipo)

うん、すぐ忘れるやつだ、これは。

で、またググるだろう。きっと。

RedHat Enterprise Linux + apache 7系は、exportが不要!

RedHat Enterprise Linux + apache + phpで、php -> oracleにつながらなくて8人日ほどドはまりした顛末。

RHEL7系からは、 /etc/sysconfig/httpd環境変数を設定する時、 export は不要になったなんて。。。

5系は

export ORACLE_HOME=/opt/app/oracle/...

7系は

ORACLE_HOME=/opt/app/oracle/...

知見者いないと、わからないって。。。

対話型を対話しないLinux expect de scp

リプレイス前は、サーバ間で共有ディスクをそれぞれマウントしていたので、cpコマンドでサクッとコピーができたけど、AWSに持っていったらそれぞれのサーバにEBSでディレクトリがきられてる!

コピーコマンド使えない!!

 

で、scpを使ってみました。

 

コピー元でシェルを動かすので、こんなコマンドでサクッとコピー。

>||

scp -P 10022 /home/test/sec-cp.dat test@192.168.1.1:/tmp/sec-cp.dat

||<

scpはsshのポートを使うので、オプション -P でポート番号10022を指定しています。

コピー元が /home/test/sec-cp.dat

コピー先が test@192.168.1.1;/tmp/sec-cp.dat

コピー先のユーザはtestです。

 

でも、困った事が。

scpは対話型コマンドなので、実行すると?

password:?って聞いてくる。

.....

しょうがないので、expectを使ってみました。

>||

expect -c "
spawn scp -P 10022 /home/test/sec-cp.dat test@192.168.1.1:/tmp/sec-cp.dat
expect "passwd:\n"
send "passworddesu"
"

||<

spawnに続いて、実行したいコマンドを。

expectに続いて、対話で表示される文字列を入力します。

 

尚、spawnで実行したコマンドがエラー吐くと、

>||

 

spawn_id: spawn id exp6 not open

||<

って言われます。