分離されたtmuxセッションで2つ以上の関数を含むファイルで特定の関数を実行する

分離されたtmuxセッションで2つ以上の関数を含むファイルで特定の関数を実行する

私はBashでUbuntu 16.04を使用しており、さまざまな機能を含むファイルがあります。これらの機能の間には次のものがあります。

tdm() {
    chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/
    sleep 2h
    chmod -R 000 "$drt"/phpmyadmin/
    tmux kill-session
}

この機能はphpmyadmin(PMA)をインストールした後、限界セキュリティ上の理由から、上記の関数はchmod /usr/share/phpmyadmin 000 -R2時間PMAを一時的に許可します(通常、データベースを変更するのに2時間で十分です)。したがって、名前は一時データベース管理(TDM)です。

この関数は呼び出されません。tdm含まれているファイルをインポートした後、実行を介してCLIから直接呼び出されるため、そうではありません。


私の質問

私の問題は、sleep関数内のコマンドがコンソールを使用できないことです(前景の変更によりコンソールが停止するsleep)。

tdmしたがって、別々のセッションで実行する必要があり、2時間(コンソールでタスクを中断せずに)権限を/にtmux変更してからPMAを再ロックし、分離したセッションを終了します。755644sleeptmux

私がここで使用する唯一の理由は、上記のようにユーティリティが私が使用している現在のセッションを中断しないtmuxためです。sleep


これまで私が考えたこと

1 - tmuxの代わりにBashの背景を使う:

その部分を削除しtmuxてバックグラウンドで関数を呼び出すことはできますが、パラメータなしで&関数を実行したくありません。

2 - 特殊ファイル:

tdm別々のセッションで実行する1つの方法は、tmuxサブルーチンをスクリプトに入れることです。特殊ファイルalias、そのファイルのファイルを作成して直接実行します。

1)特殊ファイルの作成:

$HOME/tdm.sh

2)alias次の項目に1つ追加"$HOME"/.bashrc:

alias tdm="tmux new-session -d 'bash $HOME/tdm.sh'"

三)源泉bashrc:

source "$HOME"/.bashrc

4)エイリアスの使用:

tdm

しかし、私は関数を専用ファイルのスクリプトに入れたくありません。他の関数を含む現在のファイルに保存したいと思います。


私の質問

tmux他の機能を含むファイル内のスタンドアロンセッションでこの機能をどのように実行できますか?

修正する

disownまたは解決策nohupは良いかもしれません。引数なしで関数のみを実行する限り、またはでtdmジョブが完了したかどうかは関係ありません。disownnohuptmux

ベストアンサー1

使用存在する;

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  echo "chmod -R 000 \"$drt\"/phpmyadmin/" | at "now + 2h"
}

または眠るそして

北面

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  nohup "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/" &
}

または画面

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  screen -S tdm -d -m "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/"
}

またはマルチプレクサ

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  tmux new -d -s tdm "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/"
}

おすすめ記事