終了するたびに再起動するプロセスを作成する方法
私はまさにその反対が欲しいこの問題。終了した後でも再起動されるプロセスを作成する方法を知りたいです。誰かが私に実装例を与えることができますか? 例えば、次のようにタイムスタンプを継続的に記録し、カウンタをログファイルにインクリメントする簡単なプロセスがあるとします。 #include
私はまさにその反対が欲しいこの問題。終了した後でも再起動されるプロセスを作成する方法を知りたいです。誰かが私に実装例を与えることができますか? 例えば、次のようにタイムスタンプを継続的に記録し、カウンタをログファイルにインクリメントする簡単なプロセスがあるとします。 #include
Bashがスクリプトを実行すると、ls -la /proc/
私のbashスクリプトからパラメータを解析します。特定のパターンなしで「path」という1つのパラメータのみを許可しようとしています。大文字と小文字が一致しない他のパラメーターはスクリプトを終了させます。例は次のとおりです。 #!/bin/bash while [ "$#" -gt 0 ]; do case "$1" in -v|--verbose) verbose=1 ;; -h|--help) echo "Usage: $(basename "$0") [OPTIONS] [PATH]" echo "Does something interesting with the given path." echo "" echo "OPTIONS" echo " -v, --verbose Prints verbose information." echo " -h, --help Prints this help message." exit 0 ;; *) { test -z $path && path=$1 } || { echo "Invalid command line flag $1" >&2 && exit 1 } ;; esac shift done ただし、この行は{ test -z $path && path=$1 } || { echo "Invalid command line flag $1" >&2 && exit 1 } ;;次の場合に失敗します。 myscript: line 14 syntax error near unexpected token `;;' myscript: line 14: ` *) { test -z $path && path=$1 } || { echo "Invalid command line flag $1" >&2 && exit 1 } ;;' 単にif-elseステートメントを書くことができることを知っていますが、インラインでグループ化できないのはなぜですか?中かっこを削除するとexit 1常に到達します。
私はシステムからファイルを検索し、各ファイルに対していくつかの完全性チェックを実行するスクリプトを書いています。検査に合格したらfzfに表示したいです。 fzfでエントリをクリックすると、プログラムでファイルを実行したいと思います。 これまで私は以下を持っています: dir="/path/to/dir" fd . $dir --size +1MB | while read -r line; do file_type=$(file -b "$line") echo "$line" | fzf if [[ "$file_type" == "data" ]]; then echo "$file_type" fi done デフォルトでは、指定されたディレクトリから1MBを超えるファイルを検索します。各ファイルに対して file コマンドを実行し、コマンド出力が「data」を返すことを確認します。その場合は、fzfリストに追加したいと思います。次に、エントリをクリックすると、アプリケーションを使用してフルパスでファイルを実行したいと思います。例: myapp /path/to/file/selected/in/fzf。 これまでの問題は、fzfブロックと私がループのリストを埋めることができないということです。本当にすべてを配列に最初に追加してからfzfにパイプする必要がありますか?理想的には、これは並列に発生する必要があります。つまり、検索が完了するのを待たずに検索中に動的に新しいアイテムを追加したいと思います。 また、後で選択したファイルを実行する方法もわかりません。誰かが私を助けることができますか?
githubワークフローにこれがあります。 - run: bash --version - name: run postgres run: | set -e shopt -s inherit_errexit export ID=$(docker run \ --publish 5432:5432 \ --network skynet \ --network-alias db.host \ --env-file .github/env/postgres \ --detach ${{ steps.postgres-tag.outputs.data }} ) shell: bash -euET -o pipefail -O inherit_errexit {0} 実行した結果です GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu) set -e shopt -s inherit_errexit export ID=$(docker run \ --publish 5432:5432 \ --network skynet \ --network-alias db.host \ --env-file .github/env/postgres \ --detach ) shell: /bin/bash -euET -o pipefail -O inherit_errexit {0} env: AWS_DEFAULT_REGION: us-east-1 AWS_REGION: us-east-1 AWS_ACCESS_KEY_ID: *** AWS_SECRET_ACCESS_KEY: *** "docker run" requires at least 1 argument. See 'docker run --help'. docker run [OPTIONS] IMAGE [COMMAND] [ARG...] bash 5を使用するOS Xの最小コピー bash-5.0$ export ID=$(docker run) "docker run" requires at least 1 argument. See 'docker run --help'. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container bash-5.0$ echo $? 0 bash-5.0$ docker run "docker run" requires at least 1 argument. See 'docker run --help'. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container > echo $? # services -> feature/RS2-1228-optimize-build $ ! RC=1 1 ただし、シェルはエラーで終了しません。私は通常、サブシェルが$()エラーを引き起こさないことを知っていますが、この設定は問題shopt -s inherit_errexitを解決すると思います。私のコードに欠けているものはありますか?
ログインしていないシェルユーザー(ユーザー)としてapacheログインするにはどうすればよいですか? 私が実行すると、sudo su - apache次のようになります。 このアカウントは現在利用できません。 /etc/passwdには次のものがあります。 Apache:x:48:48:Apache:/var/www:/sbin/nologin
ソフトシンボリックリンクを「適用」するコマンドはありますか? シンボリックリンクを削除し、シンボリックリンクが指す場所をコピーして、以前のシンボリックリンクがあった場所に配置するのと同じです。 これを行うためのプログラムやエイリアスを作成できますが、それを行うための組み込みコマンドがあるようです。
パラメータ文字列を装飾する次の関数があるとします。 blue() { echo -e "\033[94m$@\033[39m" } bold() { echo -e "\033[1m$@\033[21m" } これで、次のように使用できます。 bold "haha" blue "haha" ただし、それらを組み合わせるには、$()またはバックティックを使用して入れ子にする`必要があります。 bold `blue haha` blink次のような文字列装飾機能が多い場合、またはadd_prefixすべてを組み合わせることが困難な場合: blink(){ echo -e "\033[5m$@\033[25m" } add_prefix(){ echo -e "\033[4mNote:\033[24m $@" } 多くのバックティックを入れ子にし、次のことを行う必要があります$()。 add_prefix $(blink `blue $(bold haha)`) add_prefix $(blink $(blue $(bold haha))) 混乱して使いにくいです。 引数リストに関数呼び出しを保持する方法はありますか?または、関数を設定する他の推奨方法はありますか?
こんにちは、私はbashとコーディング全体について完全に最初に触れました。実行したい画面コマンドがあります。 「ftb」画面でMinecraftコンソールを実行しています。 screen -S ftb -p 0 -X stuff "tellraw @p ["",{"text":"This is a text!","bold":true,"color":"gold"},{"text":"\n"},{"text":"More text to be seen here!"},{"text":"\n"},{"text":"HAVE SOME TEXT IN UR FACE!","color":"green","clickEvent":{"action":"open_url","value":"https://google.com"}},{"text":"\n"},{"text":"Have Fun!"}]" ただし、コマンドはすべての引用符と混同されます。今まで試してみましたが、運がありませんでした... #! /bin/sh say_this() { screen -S ftb -p 0 -X stuff "$1^M" } say_this "tellraw @p ["",{"text":"This is a text!","bold":true,"color":"gold"},{"text":"\n"},{"text":"More text to be seen here!"},{"text":"\n"},{"text":"HAVE SOME TEXT IN UR FACE!","color":"green","clickEvent":{"action":"open_url","value":"https://google.com"}},{"text":"\n"},{"text":"Have Fun!"}]" 画面がすべての引用符を無視し、コマンド全体をMinecraftコンソールに送信し、「ftb」画面で実行するようにMinecraftコンソールで実行したいコマンドをカプセル化する方法はありますか? コマンドはコンソールで作成および実行する必要があります。 tellraw @p ["",{"text":"This is a text!","bold":true,"color":"gold"},{"text":"\n"},{"text":"More text to be seen here!"},{"text":"\n"},{"text":"HAVE SOME TEXT IN UR FACE!","color":"green","clickEvent":{"action":"open_url","value":"https://google.com"}},{"text":"\n"},{"text":"Have Fun!"}]
> tmux new -s test > OK=test > export OK > env | grep OK OK=test > [control]+[B],[D] > grep OK /proc/*/environ > while read P ; do ps eww -p $P | grep OK; done < <(pgrep bash) > id uid=0(root) gid=0(root) groups=0(root) ご覧のとおり、2つのことを試しましたが、まだ別のセッション(シェルインスタンス)から環境変数を読み取る方法を探しています。 tmuxから何かをエクスポートして実行したときにのみ変数を見ることができます(例:sleep 999)。共有をキャンセルしても効果がないようです。
exec $@PID 1で始まったDockerエントリポイントプロセスを前景にどのようにインポートするかを知りたいです。 試してみましたが、うまくexec $@ &いきません。 マイユースケース:設定が完了したらプロセスを終了したいのですが、exec $@docker Entrypoint.shではプロセスがバックグラウンドに切り替わるため、私のコマンドは実行されません。 助けてください ありがとう、サム