タグ付けされた質問 「bash」

他のBourne / POSIXシェルとは対照的に、GNUのBourne Again SHellに固有の質問。Unixシェル全般に関する質問については、代わりに/ shellタグを使用してください。

2
ワイルドカード展開とブレース展開を組み合わせたbash
ワイルドカードと中かっこ内で指定された拡張子のコレクションを含む文字列を展開しようとしています。以下の例が示すように、何も機能しないようです。変数にはfirstList罰金を展開しませんが、どちらもsecondList、thirdListあるいはfourthList適切に拡大します。のさまざまなバージョンも試しましたevalが、どれも機能しません。どんな助けもいただければ幸いです #!/bin/bash touch a.ext1 touch b.ext1 firstList='*.ext1' ls $firstList touch a.ext2 touch b.ext2 secondList='*.{ext1,ext2}' ls $secondList ls '$secondList' ls "$secondList" thirdList=*.{ext1,ext2} ls $thirdList ls '$thirdList' ls "$thirdList" fourthList="*.{ext1,ext2}" ls $fourthList ls '$fourthList' ls "$fourthList"

5
要求に応じて出力を新しいファイルに動的にリダイレクトするツールはありますか
現在、監視ツールの出力をファイルにリダイレクトしていますが、このツールを停止せずに、(キーバインディングを使用して)要求に応じてこの出力を新しいファイルにリダイレクトします。 何かのようなもの monitor_program | handle_stdout どこでhandle_stdout、ログを特定のポイントに配置する新しいファイルを定義できます。 私はそれを簡単に書くことができることを知っていますが、すでにこれを可能にするツールがあるかどうか疑問に思っています。

1
標準サブシェルとコマンド置換サブシェル
これらのトラップ出力について説明してください: $ line(){ echo -------------; echo $BASHPID; } $ trap 'echo bye' EXIT; trap -p; line; (trap -p; line); echo "$(trap -p; line)" trap -- 'echo bye' EXIT trap -- '' SIGTSTP trap -- '' SIGTTIN trap -- '' SIGTTOU ------------- 6176 trap -- '' SIGTSTP trap -- '' SIGTTIN …
8 bash  trap 

3
インプレース編集でSEDがファイルのグループ所有権を変更する
phpこの方法でターゲットファイルにアクセスするシェル()スクリプトがあります。 ファイルとディレクトリが書き込み可能であるかどうかを検査phpさんis_writable()(私はこれが問題であるとは思いません) sed次のコマンドでインプレースファイル編集を行います。 grep -q "$search" "$passwd_file" && { sed -i "s|$search|$replace|" "$passwd_file"; printf "Password changed!\n"; } || printf "Password not changed!\n" 結果として、私は(他のすべては正しいが)あるmyuser:www-dataはずのファイルを取得しますmyuser:myuser。 sedファイルグループの所有権は変更されているように見えますか。また、可能であればそれを回避するにはどうすればよいですか。

3
パスワードプロンプトからCTRL ^ Cを削除するにはどうすればよいですか?
suコマンドを開始し、それをキャンセルしたいとします。 Control+ Cがのsuように機能しないsudo...プロンプトを終了する必要があります(パスワードを十分に間違えるか、正しくすることにより)。 パスワードプロンプトを強制終了するために入力できるものはありますか?

1
Bashスクリプトを改善する
問題なく問題なく実行されるように、Bashスクリプトを改善する必要があります。このスクリプトはそのds4drv中で使用しており、修正方法がわからない問題があります。 最初の問題は、コントローラーが検出されたときに常に実行または機能するとは限らないことです。そのためにudevルールを作成しましたが、検出されたときにこのスクリプトが常に実行されない理由が明確ではありません。 2番目の問題は、ds4drv通常のユーザーとして実行されるのではなく、rootとしてのみ実行できるようにすることです。 3番目の問題は、作成されたPIDロックファイルを処理する適切な方法がわからないため、PIDプロセスが存在しなくなったときに、PIDロックファイルが削除されるためです。実行中のインスタンスが1つだけになるように、bashスクリプトでPIDファイルを使用する方法に関する適切なドキュメントを見つけるのは困難です。 ここにds4drvのudevルールがあります: 50-ds4drv.rules KERNEL=="uinput", GROUP="users", MODE="0666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", GROUP="users", MODE="0 666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", KERNELS=="0005:054C:05C4.*", GROUP="users" MODE="0666" ACTION=="add", SUBSYSTEM="usb", ATTRS{idProduct}=="054c", RUN+="/home/user/scripts/ds4check.sh", GROUP="users" , MODE="0666" それはudevルールがそうあるべきであると私はかなり確信しています、それはGROUPユーザーのための読み書きなので、パーミッションは私にとって正しいようです。bashスクリプトが実行され、コントローラーデバイスが接続されたときにこのルールが自動的に実行されるように設定されると、コントローラーデバイスが接続されていない場合など、一部のゲームが応答しなくなるという問題のいくつかのインスタンスがあるようです作用することが/dev/js0なく、その代わりに作用する/dev/js1代わりに。特にrootとして実行されていない場合、このエラーを返すことがよくあります。 OSError: [Errno 13] Permission denied: '/dev/input/event17' そしてもちろんbashスクリプト。 ds4check.sh #!/bin/bash # DS4 Check Script pidfile=/tmp/ds4drv.pid # check if process is already running …

3
関数内からメールコマンドを実行すると、「フォーク爆弾」が発生します。
mailbashスクリプトの関数内から実行しようとすると、フォーク爆弾のようなものが作成されます。明確にするために、これは問題を作成します: #!/bin/bash mail() { echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "example@example.org" } mail exit 0 場合によっては、コマンドを強制終了するだけで子プロセスを強制終了することもありますが、強制する必要がある場合もありますkillall -9。 メールが送信されたかどうかは関係ありません。フォーク爆弾は、いずれかの方法で作成されます。そして、のような終了コードのチェックを追加することは役に立たないようですif ! [ "$?" = 0 ]。 ただし、以下のスクリプトは意図したとおりに機能し、エラーを出力するか、メールを送信します。 #!/bin/bash echo "Free of oxens" | mail -s "Do you want to play chicken with …

1
bash:このシェルにはジョブ制御がありません
最小限のLinuxシステムを使用しています。 initは/bin/bash、の最小限のライブラリのみが静的に読み込まれ/lib/、/dev/デーモンは実行されていません(udevなどはありません)。 bashが起動すると、次のエラーが発生します。 bash: cannot set terminal process group (-1) inappropriate ioctl for device bash: no job control in this shell straceでbashを開始すると、次の出力が表示されます。 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address) ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 …
8 bash  terminal  tty  ioctl 

4
2つのURLリストを比較し、新しく追加されたURLを新しいファイルに出力します
最初に、URLのリストを含む2つのファイルを作成します。それらをoldおよびと呼びnewます。2つのファイルを比較したいのですが、newファイル内にないURLがファイルにある場合は、oldこれらをextra_urlsファイルに表示したいと思います。 ここで、diffコマンドの使用についていくつか読みましたが、これからわか​​ることは、情報の順序も分析することです。注文が出力に影響を与えたくありません。私は、余分なURLの中に欲しいnewに印刷されたextra_urlsファイル、それらはいずれかの他の2つのファイルに配置されているどのような順序に関係なく。 これどうやってするの?

2
whitepsacesを使用して複数のファイルから特定の文字を削除する
ディレクトリ内の多数の音楽トラックの名前を変更しようとしていますが、次のエラーが発生しました。 複数のファイルを移動する場合、最後の引数はディレクトリでなければなりません これはスクリプトです: for file in * ; do mv $file $(echo $file |sed 's/^.\{5\}//g') done これは空白のないファイルで機能しますが、このスクリプトをどのように変更しますか?
8 linux  bash  scripting  sed 

3
暗号化された(GPG)ファイルをオンザフライでスクリプトで調達する方法はありますか?
入手するファイルには機密情報が含まれているため、暗号化されたファイルを入手するにはbashスクリプトが必要です。 スクリプトでGPGパスフレーズの入力を求めてから実行し、暗号化されたファイルを取得します。これを行う方法はわかりません。暗号化されたファイルと共にサーバーにキーを保存したくないので、パスフレーズのユーザー入力が必要です。 いくつかの異なる方法を検討していますが、ファイルを復号化せずに、暗号化されていないファイルを取得し、後で削除します。スクリプトに問題が発生した場合に、暗号化されていないファイルが残る可能性を減らしたいと思います。 この方法でそれを調達するファイルのGPG出力を取得する方法はありますか?STDOUTを収集して解析する可能性があります(GPGがコンテンツをこのように出力できる場合)。 また、シェルスクリプトが使用できるファイルを暗号化する別の方法がある場合、私はそれを認識していませんが、他の可能性を開いています。

1
LinuxでのWindowsショートカットの作成
BashでWindowsショートカットファイル(.lnk)を作成することはできますか? いいえ、私はシンボリックリンクについて話していません... Samba共有にいくつかのWindowsショートカットを配置する必要があります。
8 bash  windows  samba 

2
呼び出し側のシェルがsudoで使用されないようにする方法
CentOS 6.5でsudo-1.8.6を実行しています。私の質問は非常に単純です。SHELLがユーザーの環境からsudo環境に伝播するのを防ぐにはどうすればよいですか? 通常、人々は逆の方向に進んでいます-彼らは環境変数を保存したいのです。しかし、シェルが/sbin/nologinsudo経由でコマンドを実行しようとするユーザー「zabbix」という問題が発生しています。Sudoは/sbin/nologinrootがサブシェルを実行できないようにを維持しています。(更新:この部分は正しいですが、SHELL環境変数ではありません。問題となっているのは、/ etc / passwdからプルされているシェル値です。) 問題を説明するテストを含めます。これは実際の使用例ではありませんが、呼び出し元のユーザーのシェルが保持されていることを示しています。ユーザーとして実行するプログラムがありますzabbix。呼び出します/usr/bin/sudo -u root /tmp/doit(プログラミングzabbixはデーモンとして実行されるため/sbin/nologin、パスワードファイルのシェルはそれを妨げません)。/tmp/doit単純に以下を備えたシェルスクリプトです。 #!/bin/sh env > /tmp/outfile (そのモードは明らかに755です)。でそれoutfileを見ることSHELLができます/sbin/nologin。ただし、この時点では、スクリプトはsudoを介してrootとして実行されているため、前のユーザーの環境変数を含めないでください。 ここに私の/ etc / sudoersがあります: デフォルトは必須です デフォルト!visiblepw デフォルトalways_set_home デフォルトenv_reset デフォルトenv_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" デフォルトenv_keep + = "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" デフォルトenv_keep + = "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" …

4
連鎖コマンドはアトミックですか?
ファイルに継続的に書き込むプロセスがあり、ルートでファイルを制御したい場合は、次のようなことができます。 sudo rm somefile; sudo touch somefile 追加プロセスがこれらの2つのコマンドの間にファイルに追加することは可能ですか?もしそうなら、その間に他のコマンドが実行されないようにする方法はありますか?
8 bash 

1
初心者管理者の冒険を最もよく追跡する方法
sudo権限が制限されているこのユーザーがいますが、彼は時々台無しにしています。私は彼の冒険に目を光らせて、掘り下げることなくダメージを元に戻すことができるようにしたいと思います。理想的には、以下の機能が適切に統合され、表示できるサービスが欲しいです トラックは次のように入力と出力のシェルttyrec(またはscriptまたはsudoロギングが設定されている場合)とttyplay(などのセッション再生できるscriptreplayかをsudoreplay)互換性のncursesプログラムに必要な素敵ではなくなり、ttyrec明らかにそれを行うことができます。 ファイルのアクセス、作成、変更を追跡します。理想的には、ファイルが変更または削除されるたびにバックアップすることもできます。 これまでのところ、要求された機能のほとんどを取得するためにセットアップしなければならないいくつかのツールを見つけましたが、それらをうまく統合するOSS製品に出会ったことはありません(Lynisコミュニティエディションでは機能が明確ではありません)。 。 シェルIOをログに記録するためにttyrec $(mktemp)、script $(mktemp)またはsudo -u $USER -i(sudoロギングが設定されている場合は)彼.bashrcに置くことができます。 いくつかのdirsにあるファイルへのアクセスを追跡するために監査を設定、のような/usr、/etc、/var。 ログイン時にLVMスナップショットを作成しますが、これは少しやり過ぎであり、システムのパフォーマンスを低下させる可能性があります。 編集: ttyrecのより良い代替手段のようですscript、それは私のすべてのIOロギング要件を満たします。次に、ファイル操作をログに記録するための適切な方法を見つける必要があります。 ベストプラクティスの提案や推奨に感謝します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.