私は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 -R
2時間PMAを一時的に許可します(通常、データベースを変更するのに2時間で十分です)。したがって、名前は一時データベース管理(TDM)です。
この関数は呼び出されません。tdm
含まれているファイルをインポートした後、実行を介してCLIから直接呼び出されるため、そうではありません。
私の質問
私の問題は、sleep
関数内のコマンドがコンソールを使用できないことです(前景の変更によりコンソールが停止するsleep
)。
tdm
したがって、別々のセッションで実行する必要があり、2時間(コンソールでタスクを中断せずに)権限を/にtmux
変更してからPMAを再ロックし、分離したセッションを終了します。755
644
sleep
tmux
私がここで使用する唯一の理由は、上記のようにユーティリティが私が使用している現在のセッションを中断しない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
ジョブが完了したかどうかは関係ありません。disown
nohup
tmux
ベストアンサー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/"
}