最新記事

しばらくして、対話型セッションでアプリケーションを再起動し続けます。
bash
shell-script
scripting
timeout

しばらくして、対話型セッションでアプリケーションを再起動し続けます。

だから私はこれが実際に適用されるものが少ない複雑なユースケースであることを知っています。だから残念ながら、これまで多くの有用な指示が見つかりませんでした。 デフォルトでは、ログイン時にCLIアプリケーションを自動的に実行し、シャットダウン時に設定された時間(1分など)が経過した後にアプリケーションを再起動するターミナル専用セッションがあります。シェルはアプリケーションのシャットダウン中に正常に機能する必要があります。 これは私の現在の設定です(これまではうまく機能します)。 端末専用セッションがあります(GUIなし、この場合はLinux Mint)。 ログインすると、対話型CLIアプリケーションが自動的に実行されます(たとえば、.bashrcに追加すると簡単に実行されます)。 ユーザーが自分のCLIアプリケーションを終了したら、通常のbash端末に戻ってコマンドを実行できます(必要に応じて)。 今までは分からない難しい部分が出てきます。 タイムアウトに達するまで端末を使用可能な状態に保ちながら、短時間でユーザー端末でアプリケーションを自動的に再起動するにはどうすればよいですか。 ユーザーは、bashで潜在的にダメージを与える可能性のある操作(他のシェルの開始、実行中のプロセスの終了、またはログアウトなど)を行わないと仮定できます。すばやく完了する1〜2つの異なるコマンドを実行できるはずですが、それ以外は何も実行できません。 私はアプリケーションの実行と新しいbashを起動するコマンドの実行を交互に(ループ内で)実行するスクリプトを実行してこれを実行しようとしましたが、timeout正しく機能しませんでした。 timeoutコマンドを使用して対話型bashセッションを開始できないようです。したがって、これは可能なアプローチかもしれませんが(正しい構文へのポインタは大歓迎です)、他の方法やアイデアもまったく問題ありません。

Admin

Linuxで$ PATH出力を変更する方法
shell-script
command-line

Linuxで$ PATH出力を変更する方法

閉鎖。この質問には詳細または明確性。現時点では回答は許可されていません。 この質問を改善したいですか?詳細を追加して質問を明確にしてください。この記事を編集してください。 閉鎖2時間前。 この問題を改善する $PATHの出力を修正する方法 $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin:/root/bin 到着 $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin

Admin

ループ変数の出力が予想値と異なる値を表示します。
bash
shell-script
for
variable-substitution

ループ変数の出力が予想値と異なる値を表示します。

back/現在の作業ディレクトリにWarという2つのフォルダがあるとしますfront/。私は彼らのそれぞれの中に入り、何かをしようとしました。以下の簡単なスクリプトで: for dir in */ ; do echo "$(dir)" done 私は次の結果を期待しています: back front しかし、私が得るものは次のとおりです。 back front back front 私は理解できません。結果はcdフォルダに入ろうとすると次のようになります。 for dir in */ ; do echo "$(dir)" cd $(dir) echo "$(pwd)" cd .. done 私は得る: back front /path/to/back back front /path/to/back つまり、私は決して入らないfront/。誰かが私が間違っていることを理解するのに役立ちますか?

Admin

このBashスクリプトの助けを探しています。 [閉じる]
shell-script

このBashスクリプトの助けを探しています。 [閉じる]

閉鎖。この質問には詳細または明確性。現時点では回答は許可されていません。 この質問を改善したいですか?詳細を追加して質問を明確にしてください。この記事を編集してください。 閉鎖22時間前。 この問題を改善する 確立されたこの行列模倣スクリプトDerrick.blargが作成したこの効果は、他の効果の中で最も気に入っています。 過去5日間、私はコンソールウィンドウサイズの1を引いた線の半分を印刷するように軌跡レンダリングを再設計しようとしました。私が試したことは何もありません。ループが各列に対して2回トレースを生成し、中央の列から始まる代わりに、中間の列を動的に変更してコンソールの中央に文字列テキスト変数を表示し、変数が文字列の文字を表示するときに終了することができます。ストラップの軌跡。変える # This script creates a Matrix-style falling text effect in the terminal. # Define strings for extra characters (Japanese Katakana) and extended ASCII characters extra_chars="カキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン" extended_ascii="│┤┐└┴┬├─┼┘┌≡" # Define arrays of color codes for a fading green color effect, and a static color fade_colors=('\033[38;2;0;255;0m' '\033[38;2;0;192;0m' '\033[38;2;0;128;0m' '\033[38;2;0;64;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;32;0m' '\033[38;2;0;16;0m' '\033[38;2;0;8;0m') # Fading green colors static_color='\033[38;2;0;0;0m' # Static dark green color white_bold='\033[1;37m' # White and bold for the primary character # Get terminal dimensions COLUMNS=$(tput cols) # Number of columns in the terminal ROWS=$(tput lines) # Number of rows in the terminal # Hide the cursor for a cleaner effect and clear the screen echo -ne '\033[?25l' clear # Function to generate a random character from the set of extra characters and extended ASCII random_char() { local chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789${extra_chars}${extended_ascii}" echo -n "${chars:RANDOM%${#chars}:1}" } # Generate a list of 1000 random characters random_chars="" for (( i=0; i<1000; i++ )); do random_chars+=$(random_char) # Add a random character to the end of the string done # Initialize a counter for cycling through the random characters char_counter=0 # Counter for cycling through the random characters # Initialize arrays to keep track of the position and trail characters of each column positions=() # Array to store the current position in each column trail_chars=() # Array to store the trail characters in each column for (( c=1; c<=COLUMNS; c++ )); do positions[$c]=$((RANDOM % ROWS)) # Random starting position for each column trail_chars[$c]="" # Start with an empty trail for each column done # Function to update the display with the falling text effect update_line() { local last_pos=0 # Track the last position to optimize cursor movement for (( c=1; c<=COLUMNS; c++ )); do # Randomly skip updating some columns to create a dynamic effect if [ $((RANDOM % 4)) -ne 0 ]; then continue fi local new_char=${random_chars:$char_counter:1} # Select the next character from the random string char_counter=$(( (char_counter + 1) % 1000 )) # Update the counter, cycling back after 1000 local pos=${positions[$c]} # Current position in this column local trail=${trail_chars[$c]} # Current trail of characters in this column trail_chars[$c]="${new_char}${trail:0:$((ROWS - 1))}" # Update the trail by adding new character at the top # Render the trail of characters for (( i=0; i<${#trail}; i++ )); do local trail_pos=$((pos - i)) # Calculate the position for each character in the trail if [ $trail_pos -ge 0 ] && [ $trail_pos -lt $ROWS ]; then local color=${fade_colors[i]:-$static_color} # Choose color from the fade array or static color if beyond the array if [ $i -eq 0 ]; then color=$white_bold # First character in the trail is white and bold fi if [ $last_pos -ne $trail_pos ]; then printf "%b" "\033[${trail_pos};${c}H" # Move cursor to the right position last_pos=$trail_pos fi printf "%b" "${color}${trail:$i:1}\033[0m" # Print the character with color fi done positions[$c]=$((pos + 1)) # Update the position for the next cycle if [ $pos -ge $((ROWS + ${#fade_colors[@]})) ]; then positions[$c]=0 # Reset position if it moves off screen trail_chars[$c]="" fi done } # Main loop for continuous execution of the update_line function while true; do update_line done # Reset terminal settings on exit (show cursor, clear screen, reset text format) echo -ne '\033[?25h' # Show cursor clear tput sgr0 # Reset text format```

Admin

検索ツールを使用してシステムパス($ PATH)でファイルを検索するには?あるいは、検索の開始点ディレクトリを式としてどのように指定できますか?
bash
shell-script
find
path
tilde

検索ツールを使用してシステムパス($ PATH)でファイルを検索するには?あるいは、検索の開始点ディレクトリを式としてどのように指定できますか?

たとえば、システム$ PATHの一部であるすべてのディレクトリで特定のバイナリを参照するすべてのシンボリックリンクを探したいとします。すべてのディレクトリを手動で指定すると、これを正常に実行できます。 sudo find ~/bin /home/samokat/.local/bin /home/samokat/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin -lname /opt/openoffice4/program/soffice しかし、 $PATH 拡張でコマンドを使用しようとすると、次のようになります。 sudo find `echo $PATH | tr ':' ' '` -lname /opt/openoffice4/program/soffice エラーと結果が表示されます。 find: ‘~/bin’: No such file or directory /usr/bin/soffice.link-to-openoffice-bak echo $PATH | tr ':' ' ' 正しいパスを出力してください。 ~/bin /home/samokat/.local/bin /home/samokat/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin 以下も機能しません。 sudo find `echo $PATH | tr ':' ' ' | xargs` -lname /opt/openoffice4/program/soffice sudo find { `echo $PATH | tr ':' ' ' | xargs` } -lname /opt/openoffice4/program/soffice sudo find eval "echo $PATH | tr ':' ' ' | xargs" -lname /opt/openoffice4/program/soffice echo $PATH | tr ':' ' ' | xargs | sudo find -lname /opt/openoffice4/program/soffice # runs some long computation starting pointディレクトリを計算されたパラメータにどのように渡すことができますかfind?可能ですか?

Admin

PAGERを使用して最も広く使用されているシェルに適したスクリプトを作成するにはどうすればよいですか?
shell-script

PAGERを使用して最も広く使用されているシェルに適したスクリプトを作成するにはどうすればよいですか?

デフォルトでは、次のスクリプトがあります。 if [ -t 1 ]; then bold="$(tput bold)" unbold="$(tput sgr0)" else bold="" unbold="" fi TEXT=" ${bold}Hello World${unbold} There's a bunch of text in here that I don't control, but I can escape it, so I put slashes before double quotes (\") and dollar signs (\$) " ACTUAL_PAGER="${PAGER:-"less -R"}" echo "$TEXT" | $ACTUAL_PAGER これはbashではうまくいきますが、zshではzsh: command not found: less -RzshがACTUAL_PAGER。PAGERmore bash、zshなどでうまく機能する方法はありますか?

Admin

マルチホスト接続テスト
shell-script
shell

マルチホスト接続テスト

サーバー間の接続が正しく機能するかどうかを示す簡単なスクリプトがあります。問題は、確認するサーバーが複数あり、1つずつ確認したくないということです。サーバーのリストを追加する方が良いでしょう。ファイルとスクリプトは 。誰もがループでスクリプトを拡張するのに役立ちますか? SERVER=$1 PORT=$2 nc -z -v -G5 $SERVER $PORT &> /dev/null result1=$? if [ "$result1" != 0 ]; then echo port $PORT is closed on $SERVER else echo port $PORT is open on $SERVER fi

Admin

ETagをBash変数としてcURLに渡す
bash
shell-script
curl

ETagをBash変数としてcURLに渡す

私のetagをcURLに渡して成功したレスポンスを得ようとしています。私が受け取るetagは次のとおりです。 etag=$( curl \ -SIXGET \ -u $token \ -H "Accept: application/json" \ "$api_url/domain-types/activation_run/collections/pending_changes" | awk '/^ETag:/ { print $2 }' これが正しいetagを返すことを確認しました。しかし、次のcURLリクエストは失敗します。 curl -v -L \ -u $token \ -H "Accept: application/json" \ -H "If-Match: $etag" \ -H "Content-Type: application/json" \ -d "{ \"sites\": [ \"$site\" ] }" \ "$api_url/domain-types/activation_run/actions/activate-changes/invoke" ここで問題は、-H "If-Match: $etagetagをリテラル文字列(引用符を含めるか除く)に渡すと有効な応答が得られることです。ちなみにファイルに入れて呼び出す${etag}こともできません。\"$etag\"@etag.txt エラー応答は次のとおりです。 400 Bad Request

Bad Request

Your browser sent a request that this server could not understand.


...
上記のコードスニペットはすべてscript.shファイルにあります。sudo ./script.sh CheckMKのREST APIを使用しています。 編集:実際に:printf "etag <%q>\n" "$etag"わかりましたetag <$'"e3asdajldlskj..."\r'>。これをetag宣言に追加し| tr -d '\r'てcURLリクエストに使用すると、$etag問題を解決できます。

Admin

Systemd - 特定の日にユーザーログイン後にbashスクリプトを実行する
shell-script
systemd
systemd-timer

Systemd - 特定の日にユーザーログイン後にbashスクリプトを実行する

私はi3ウィンドウマネージャを使用しており、毎日リモートで作業しながらモニタを設定するスクリプトを実行したいと思います。火曜日、私は現場で作業していたが、別のスクリプトを実行したかった。私の問題を解決するためにbash条件文を使用することもできますが、起動/停止/再起動/アクティブ化/非アクティブ化よりもsystemdについてもっと学ぶ機会があります。 私のスクリプトは次のとおりです(ターミナルから起動すると正しく動作します)。 #!/bin/sh xrandr --output eDP-1 --off --output HDMI-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output DP-2 --off --output DP-3 --off --output DP-4 --off これは私のデバイスです(systemctl --user start home_screen_setup.serviceを介して端末から起動した場合にのみ機能します)。 [Unit] Description=Monitors setup when I work from home After=graphical-session.target BindsTo=graphical-session.target PartOf=graphical-session.target Requisite=graphical-session.target ConditionEnvironment=DISPLAY ConditionEnvironment=XAUTHORITY [Service] Type=oneshot ExecStart=/home/userX/.screenlayout/home_setup.sh [Install] WantedBy=graphical-session.target これは私のタイマーです。 [Unit] Description=Setup my screen configuration on every day except Tuesday [Timer] #OnBootSec=15seconds OnCalendar=Mon,Wed,Thu,Fri [Install] WantedBy=timers.target いくつかのステータス出力: userX@HP-ProBook-450:~$ systemctl --user status home_screen_setup.service ○ home_screen_setup.service - Disables laptop screen when I work from home Loaded: loaded (/home/userX/.config/systemd/user/home_screen_setup.service; enabled; vendor preset: enabled) Active: inactive (dead) TriggeredBy: ● home_screen_setup.timer userX@HP-ProBook-450:~$ systemctl --user status home_screen_setup.timer ● home_screen_setup.timer - Setup my screen configuration on every day except Tuesday Loaded: loaded (/home/userX/.config/systemd/user/home_screen_setup.timer; enabled; vendor preset: enabled) Active: active (waiting) since Sun 2024-03-03 12:00:22 CET; 1min 4s ago Trigger: Mon 2024-03-04 00:00:00 CET; 11h left Triggers: ● home_screen_setup.service mar 03 12:00:22 HP-ProBook-450 systemd[2306]: Started Setup my screen configuration on every day except Tuesday. 私は何が間違っていましたか?

Admin

「部品の実行」の一般的な用途は何ですか? [閉鎖]
bash
shell-script
command-line

「部品の実行」の一般的な用途は何ですか? [閉鎖]

閉鎖。この質問には詳細または明確性。現時点では回答は許可されていません。 この質問を改善したいですか?詳細を追加して質問を明確にしてください。この記事を編集してください。 閉鎖2ヶ月前。 この問題を改善する run-partsディレクトリ内のすべてのプログラムとスクリプトを実行します。しかし、いつ必要ですか? 一般的な用途は何ですか?

Admin

7日間のファイルだけをアーカイブし、先日のファイルは削除するシェルスクリプトを生成
linux
shell-script
shell

7日間のファイルだけをアーカイブし、先日のファイルは削除するシェルスクリプトを生成

バックアップディレクトリに7日間作成されたすべてのファイルをアーカイブし、古いファイルを削除したいと思います。 -mtimeオプションを試してみて、3〜4日間スクリプトが実行されるのを見ました。しかし、5〜6日ほど過ぎると動作が停止しました。したがって、削除は発生せず、ディレクトリがいっぱいになりました。 -mtimeが機能していないようです。 また、これを自動化するためにcronを実行しています。 10 3 * * * su - cassandra -c /opt/cassandra/scripts/backup_cassandra >> /tmp/backup.log これは私が使用するスクリプトです。 #!/bin/bash set -x export PATH=/opt/dse/bin/:/usr/lib/jvm/jre-1.8.0//bin:/sbin:/usr/sbin:/bin:/usr/bin:/root/bin . /opt/cassandra/.env # source functions & password # First we delete backup files older than 8 days. find /data_cassandra/cassandra/backup/ -name "dc_east__*" -mtime 8 -exec rm {} \; # cd to where the scrips are. cd /opt/cassandra/scripts/ # And start the backups. ./backup.sh start -all # Kick off a full backup この問題を解決するのに役立ちます。

Admin