• 締切済み

FedoraCore4 の.bash_logoutを動作させたい!

FedoraCore4をインストールして.bash_logoutを試しています。この中に不要ファイル削除などの操作を書き込んでみましたが、うまく働いてくれていません。(Vineのときはうまくいっていたのに・・・。) シェルスクリプトポケットリファレンス bash編 / 宮原徹/著 川原竜人/著のとおりにしているのですが、・・ 何かアドバイスをお願いします。

みんなの回答

  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.3

>GUIの画面では、.bash_logoutが動きませんでした。 それはbash的にはログイン・ログアウトしていないからです。 GUIでのログインはxdmとかgdmとかの常駐プロセスが管理して、ログインするとセッションマネージャが起動します。ログインシェルは起動しません。 私は普段ほとんどtelnetでしかログインしてないので、GUIでのログアウト時に何かやりたいときにどうすればいいかわかりません。他の人に期待。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.2

「うまく働いてくれない」とは具体的にどんな現象でしょう? .bash_logoutに書いたことが全く実行されていないのか、一部のコマンドが実行されないのか、エラーが出るのか、etc...... もし全く実行されないなら、一度ログアウトしてしばらく待ってからログインして、 ls -lu .bash* でファイルの参照時刻を調べ、.bash_logoutファイルの参照時刻が先ほどログアウトした時刻と同じですか? 一部のコマンドがおかしいなら、.bash_logoutの中身を書いてみてください。

maiko100
質問者

補足

Ctrl+Alt+F1によって、テキストモードに入ってログインログアウトすると、うまく動くきます。また、ls -lu .bash*でのファイルの参照時刻もログアウトした時刻と一致します。しかし、(Ctrl+Alt+F7で戻って)GUIの画面では、.bash_logoutが動きませんでした。 .bashrcはうまく動きます。 いかがなものでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

まず削除以外のスクリプトは動きますか? そうであればパーミッションの問題やプログラムの pathがとおってないなどあるかもしれません。 確認のためにはリダイレクトでログをとってみる とよいかもしれませんね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • シェルスクリプト内の「exit」

    クライアントからteratermでservAに接続します。 そこからservBに接続します。 $ ssh servB サーバーBに個人のディレクトリがあり、そこにシェルスクリプトを作っています。 そのシェルスクリプトは「exit 0」で終わっています。 これを実行すると、サーバーBからログアウトしてしまいます。 exitはシェルスクリプト内で使うと、シェルスクリプトを終了するだけかと思ったのですが、ログアウトもしてしまうものなのでしょうか? exitを書かなければ、ログアウトすることなく、カレントディレクトリは変わらないままです。 実行するたびに $ ssh servB $ cd work/mydir と実行しないと自分のディレクトリに戻ってこれないので不便です。 色々と調べたのですが、なぜログアウトしてしまうのかわかりません。 どうすれば、ログアウトしないのか教えて下さい。 よろしくお願いいたします。 シェルスクリプト(TEST) #!/bin/bash -xv echo hello! exit 0 実行結果 [company@servB mydir]$ . TEST hello! Connection to servB closed. [company@servA ~]$

  • シェルスクリプトの作り方

    OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。

  • スクリプトを起動時に実行させるには

    バックアップ用の簡単なシェルスクリプトを書きました。 これを、システムの起動時と終了時に自動的に実行させたいのですが、 どこに置いたらいいのでしょうか。 とりあえず思い付いたのはbash_profileとbash_logoutに書くという方法ですが,できればログイン前,システム起動スクリプトが終わったあとあたりに実行させたいと思っています。 非常に初歩的な質問で申し訳ありませんが,どう調べていいかわからず困っておりますので,ごく大まかにお教え頂くかリンクなどを紹介していただければと思います。

  • X上のウィンドウ・フォーカスのスクリプトでの変更

    X(GNOME)上に画像を次々に表示するシェルスクリプトを作ったところ、表示された画像にフォーカスが移るのでエディタなどがスムーズに使えません。 fgは1つのbashの中でジョブを操作するものですが、X上のウィンドウのフォーカスをシェルスクリプトで変える方法はありますでしょうか。 たぶんシェルスクリプトではできず、GTKを勉強しないといけないと思うのですが、Rubyでの手っ取り早い方法でもよいです。 2008年12月14日

  • Linuxでログインしないユーザーを作成した場合

    Linuxでログインさせたくないユーザーを useradd -s /sbin/nologin XXX の様にして作成した場合、 /home/XXX 以下に .bashrc, .bash_profile, .bash_logout 等のファイルが作成されましたが、 元々シェルは使わせたくないので削除しても問題ないでしょうか?? また、もし問題がないのであれば、 始めから.bash* のファイルを作成させないようなユーザー追加方法はあるのでしょうか? ご教授ねがいまする。

  • シェル/grep 同名プロセスのカウント

    例えば、ターミナルをいくつか起動して、bashが動いている数を調べるのに、 $ cnt=`ps ax | grep 'bash' | grep -v -c 'grep'` $ echo $cnt とすると、あるべき数より1つ多い数値がcntに入っています。 $ ps ax | grep 'bash' | grep -v -c 'grep' で出力される数に1を足した数値です。 一方、lessをいくつか起動して、上記の'bash'を'less'に代えると正しい数値が返ります。 上記の'bash'を自作シェルスクリプト'mycmd'に代えると、cntにはあるべき数より1つ多い数値が入ります。 間違った操作をしているのかもしれませんが、これはどういう事情によるものでしょうか。 2014年8月7日

  • bashシェルでのmysqlCSVファイルについて

    bashシェルでのmysqlCSVファイルについて教えて下さい。 下記のスクリプト実行するとroot権限者で実施すればうまく動作するのですが、 xxxxユーザで実施した場合は、/tmp/mysql_export_linkdata.csvのファイル所有者がxxxxではなく、mysqlになってしまい ファイル削除(rm)ができません。 何が悪くてどう直せばよいですか? chownで変更したり、chmod 777にしたりやってみたのですが 駄目でした。 #/bin/bash if [ -f /tmp/mysql_export_linkdata.csv ] then rm /tmp/mysql_export_linkdata.csv echo rm /tmp/mysql_export_linkdata.csv fi mysql --user=xxxx --password=xxxx dburl <<eof select * from linkdata into outfile "/tmp/mysql_export_linkdata.csv" fields terminated by ','; eof chown xxxx.xxxx /tmp/mysql_export_linkdata.csv chmod 777 /tmp/mysql_export_linkdata.csv ls -lrt /tmp/mysql_export_linkdata.csv echo ls -lrt /tmp/mysql_export_linkdata.csv

  • 実行中のシェルスクリプト自体を修正した場合の動作

    シェルスクリプトで自分自身を削除するような構文を組んだとしても最後まで実行されました。 しかし、自分自身に別の同名ファイルを上書きコピーした場合は、 中途半端にコピー後のシェルが実行されました。 お聞きしたいのは、  ・「削除した場合でもスクリプトは最後まで実行される」という認識は正しいのか  ・コピーした場合はどうなるのか の2点です。 今回試したところ、コピーした場合は2行目の途中からコピー後のスクリプトが実行されたのですが、 これはマシンのスペックによるのでしょうか? 「コピーした場合はどうなるのかわからない」と判断した方がよいでしょうか? 現在、自分自身を修正するようなスクリプトを作成したいのですが、 上記認識で作ってよいのかどうか迷っています。 よろしくお願いします。 ▼以下、今回試した内容です。 goというスクリプトを作成しました。  #!/bin/bash  rm -rf ./go  echo "1"  echo "2"  echo "3"  echo "4"  echo "5" のように書かれています。 これをカレントディレクトリで ./go のように実行します。 実行結果は特にエラーメッセージも出ず、 goスクリプトは消え、1~5がコンソールに表示されました。 ファイル自体を削除されてもスクリプトを終えるまではコマンドは生きているように見えます。 上記goファイルのrm -rf ./goを、  cp -rf ../go . に修正し、 上の階層に同名のgoスクリプトを用意します。 こちらのgoには  #!/bin/bash  cp -rf ../go .  echo "A1"  echo "A2"  echo "A3"  echo "A4"  echo "A5" と書いています。 この状態で、最初の階層でgoを実行します。 最初の実験結果から、  ・カレントのgoの内容は上の階層のgoをコピーされたもの(echo "A1"~の方)になる。  ・コンソールには1~5が表示される と考えました。 実際は、当然goファイルは上の階層のgoをコピーしたものになりましたが、 コンソールには、 ./go: A1: command not found A2 A3 A4 A5 と表示されました。 2行目の途中から、上の階層のgoの内容が実行されているように見えます。 また2回目の環境でコードを、  #!/bin/bash  rm -rf ./go  cp -rf ../go .  echo "1"  echo "2"  echo "3"  echo "4"  echo "5" にした場合は、コンソールに表示されたのはA1~A5ではなく1~5でした。 ▲上記が試した内容です。

  • set -o posixやset -tの効果

    setのオプションを調べています。 解説を読んでも意味不明なものがほとんどですが、 中には、もう少しヒントをもらえれば理解できそうなものがあります。 次の2つのオプションについて教えてください。 set -o posix: これは解説ではbashの動作をPOSIX 1003.2に準拠させるとありました。 bashの開発方針はもともとPOSIXに準拠するようになっているため、 set -o posixを実行しても挙動の違いが確認できません。 ですので、どのようなコマンドを実行した場合に標準のbashと挙動が異なるか発見した方は教えてください。 set -t(-o onecmd): これは解説ではコマンドを1つ読み込み、実行後、終了するとありました。 私はset -t実行後の最初のコマンド実行後に終了すると予想していたのですが、 実際に試してみると、set -tを実行した瞬間にログアウトしてしまったのです。 これが本来の挙動なのでしょうか。 もし、これが本来の挙動なのであれば、どのような目的でこのような挙動が実装されたのかご存知のかたは教えてください。 もし、私の予想通り、オプション設定後、1個はコマンドを実行できるのだとすれば、 それはどのようにやればよいのか教えてください。 シェルスクリプトを作成しても、set -t以下のコマンドは一切実行されず、シェルに戻ってしまいました。

  • bashで複数の変数を一時ファイルなし作らず一斉に取り込むには

    bashで書こうとしているスクリプトの中で、外部情報を参照して シェル変数として使おうとしています。 中間ファイルなど作成せず、ひとつの外部コマンドを実行する事で 複数の変数定義を一度に行いたいのですが、良い方法は ありますでしょうか? 変数の値を取得する際の負荷、実行環境の後片付けなどの 行儀よさなども含めて、できるだけ綺麗に実行したいと 考えています。 例えば... SQL自動生成スクリプトを作成する際に、指定された テーブルの各種メタデータを取得する必要がある場合 (テーブルのオーナー、作成者、件数、etc.)... 変数が一個なら、バッククォートで ROWCOUNT=`${PROGDIR}/get_rowcount` のようにあらかじめ作っておいたそれぞれの変数値を 取得できるコマンドを叩くよう書けばいいですが、 変数がそれなりの数ある場合は、都度DBに対して ログイン/ログオフをする事になり、無駄な負荷を かけてしまいます。 また、ドットコマンドだと、(SQL部分は実際のDBMSのものではありませんが) DB_Qry_Process<<-_EOF logon ${DB_USER}/${DB_PASS}; export /${TMPDIR}/tmpfile.${$} select 'ROWCOUNT='||count(*) from ${TABLE}; select 'OWNER='||table_owner from sys_metadata.tableinfo; logoff; EOF . /${TMPDIR}/tmpfile.${$} のように、あらかじめ変数定義ぽく記述した一時ファイルを 作成しておいて読み込ませれば、DB処理も簡潔になりますが、 アボートしたりで中間ファイルの削除をし損なったりした際に ゴミがどんどん溜まっていったり環境をケアしないと いけなくなります。