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

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

4
関数をBashの別のユーザーに渡しますか?
関数をあるユーザーから別のユーザーに渡す方法はありますか? たとえば、ルートとして実行する小さなBashスクリプトがあります。 #!/bin/bash user_func(){ whoami exit } su vagrant -c 'user_func' ただし、user_func関数はVagrantユーザーに対しては定義されておらず、ルートに対してのみ定義されているため、実行できません。 私の他のオプションは、複数の行を持つことです su vagrant -c 'cmd1' su vagrant -c 'cmd2' , etc または、複数のコマンドをex:で実行しますsu vagrant -c 'cmd1; cmd2; cmd3;'が、特にVagrantユーザーとして5つ以上のコマンドを実行しようとする場合は、余分なコマンドを使用しない方がよいでしょう。 同じスクリプト内から別のユーザーに関数を渡すことはできますか(たとえば、別のユーザーとしてディスク上にスクリプトを作成してから、その生成されたスクリプトを実行しない)。または私が見落としている別のオプションはありますか?
11 bash 

1
プロセス置換<()がssh -Fで機能しないのはなぜですか
迷惑な仮想マシンがいくつかあります。それらにログインするには、vagrant sshコマンドを発行します。通常のsshコマンドでログインしたい。vagrant ssh-config適した設定ファイルを出力します $ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2201 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /home/cbliard/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL この設定をファイルに出力してssh -Fで使用すると、すべてが正常に機能します。 $ vagrant ssh-config &gt; /tmp/config $ ssh -F /tmp/config default =&gt; logged successfully プロセス置換演算子&lt;(cmd)を使用して一時構成ファイルの作成を防ぐと、失敗します。 $ ssh -F &lt;(vagrant ssh-config) default Can't open …

3
bash:読み取り専用ルートパーティションでread <<<“ $ VARIABLE”を使用する際の問題。既知の回避策はありますか?
偶然にも、ATA-ID-to-device-nameスクリプトを使用する必要がありました(/server/244944/linux-ata-errors-translating-to-a-device-name/にあります) 426561#426561)読み取り専用 /パーティション。気になる方のために言うと、これはUbuntuの回復コンソールで、/パーティションにアクセスできますが、デフォルトでは読み取り専用でマウントされます。それがなければ、スクリプトが特定の行のためにR / Oシステムで奇妙な動作をすることをおそらく私が知ることはなかったでしょう。 IFS=: read HostMain HostMid HostSub &lt;&lt;&lt; "$HostFull" これは、書き込み権限がない場合は機能しません。しかし、失敗するとは思いませんでした。しかし、どうやら&lt;&lt;&lt;オペレーターはどこかに一時ファイルを書き込む必要があります。 しかし、一時ファイルの作成を回避する方法はありますか、または、ファイルが書き込まれる場所を指定する方法はありますか?Ubuntuの回復コンソールには、/runディレクトリに書き込み権限がありreadます。これは、一時ファイルを通常とは別の場所に「伝える」ことができた場合にそうなります。

2
シェル機能の名前は何ですか `>(tee copyError.txt>&2)`?
stdoutとstderrをログファイルに記録する必要がありますが、画面に表示されるのはエラーメッセージだけです。私はこれを行うことができます: cp -rpv a/* b 1&gt; copyLog.txt 2&gt; &gt;(tee copyError.txt &gt;&amp;2) ウェブのどこかで見つけました。 これがどう&gt;(tee copyError.txt &gt;&amp;2)呼ばれるのか知りたいだけ?山かっこやかっこなどの文字は無視されるため、グーグルできません。
11 bash  shell 

4
クリア時にテキスト/画面の点滅を防止
私のスクリプトは次のようなことをしています: while :; clear do_a_lot_of_output_here sleep 1 done クリアして出力しているときに画面が点滅しないようにするオプションはありますか?watchコマンドのようにしたいのですが(それはで書かれていますC)。何かアドバイスは? clear | hexdump -C 00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J| 00000007 PS。使用しているbashだけです。
11 bash 

2
引用符付きと引用符なしの文字列展開
for i in $(xrandr); do echo "$i" ; done for i in "$(xrandr)"; do echo "$i"; done for i in "$(xrandr)"; do echo $i; done 1が2と異なる理由を理解していますが、3が2とは異なる出力を提供するのはなぜですか?出力についても説明してください。引用符は改行でどのように機能しますか?

10
プロセスがバックグラウンドで既に実行されているかどうかを確認する方法(およびそれに基づいて再実行をスキップする方法)をbashしますか?
プロセスがまだ(バックグラウンドで)実行されていない場合に、特定のコマンドのみを実行するbashコマンドラインを作成できますか? コマンドがすでに実行されているかどうかを確認するにはどうすればよいですか? (&amp;&amp;そのため、間に次のコマンドを追加して、最初のコマンドがtrueの場合にのみ次のコマンドが実行されるようにすることができます)。 *:テスト、決定、発見、発見
11 bash  shell  process 

2
Xウィンドウが現れる/消えるのを(正気に)待つ
シェルスクリプト内で、タイトルに文字列が含まれているウィンドウが表示されるのを待ち、何らかのアクションを実行してから、ウィンドウが消えるのを待ち、その他のアクションを実行する必要があります。 昨日まで、私はこの単純なコードを持っていました。この問題は、スクリプトの実行中にディスクを省電力状態にすることができず、長時間続く可能性があることです。 while :; do until wmctrl -l | grep -q "$string"; do # until sleep 0.5 done : do action 1 while wmctrl -l | grep -q "$string"; do # while sleep 0.5 done : do action 2 done 上記のコードがめちゃくちゃディスクを起こしていると判断したxdotoolので、いくつかのコマンドラインツールのドキュメントを読み、ウィンドウが表示されるのを待ちxprop、ウィンドウがいつ消えたかを判断することにしました。 while :; do # we use `until' because sometimes …
11 bash  shell  python  window 

2
実行する前にサブシェルを展開しますか?
私はサブシェルを使用してコマンドを実行することが多く、何かを実行する前にサブシェルを展開したい場合があります。このようにして、実行していることを確認し、起こりそうなことを編集することもできます。 たとえば、次のコマンドラインを実行する前に展開して、サブシェルの結果を編集するにはどうすればよいですか? 例えば $ find -name "test.txt" /tmp/test.txt $ mv $(!!) /tmp/new.txt コマンドを実行する前に、次のようにサブシェルを展開したいと思います。 $ mv /tmp/test.txt /tmp/new.txt これを行う方法はありますか?

4
CPU /メモリ使用率が高くなりすぎたときにプロセスを自動的に強制終了するBashスクリプト
CPUやメモリの使用率が80%に達した場合にプロセスを強制終了するスクリプトを作成しました。これが発生すると、強制終了されたプロセスのリストが作成されます。それを改善するために私は何ができますか? while [ 1 ]; do echo echo checking for run-away process ... CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g") CPU_USAGE_THRESHOLD=800 PROCESS=$(ps aux r) TOPPROCESS=$(ps -eo pid -eo pcpu -eo command | sort -k 2 -r | grep -v …

4
平均ファイルサイズを計算する
ディレクトリ内の平均ファイルサイズを計算するための便利なワンライナーを探しています。 私が欲しいのは: すべてのファイルのサイズ/ディレクトリ内のファイル数

7
配列名の一部として変数を使用する方法
2つの配列があります。 arrayA=(1 2 3) arrayB=(a b c) そして、コマンドライン引数を使用して、つまりなしでそれらの1つを出力したいと思いますif else。 構文のバリエーションをいくつか試しましたが、成功しませんでした。私はこのようなことをしたいと思っています: ARG="$1" echo ${array${ARG}[@]} しかし、「悪い置換」エラーが発生します。どうすればこれを達成できますか?
11 bash  shell 

4
Bash:stdoutの最後(またはN番目)の行をキャプチャ/使用
問い合わせ 私はBashを使用しています。ファイルを探すときは、多くの場合、次のことを行います。 find -name stackexchange.hs そして多くの場合、結果は次のようになります。 /youre/the/man/now/dog/stackexchange.hs /you/are/no/longer/the/dog/dog/stackexchange.hs /this/is/the/file/i/want/stackexchange.hs 次に、次のいずれかを実行します。 オプション1:結果リストの最後のアイテムをvimで開きます。 オプション2:結果リストのN番目のアイテムをvimで開きます。 現在、マウスでカットアンドペーストしています。これは私に私の質問をもたらします: オプション1と2を実現する簡単なワンライナーはありますか?これはコマンドの後に発生していることに注意してくださいfind。 ある種のbashベクトル/配列で標準出力からN行をキャプチャする方法はありますか? 理想的な使い方 $ find -name am_i_really_all_alone.txt ./borges/library/you_are_not_alone.txt ./borges/library/am_i_really_all_alone.txt $ vim (N) (構文とセマンティクスは異なる場合がありますが、要点はわかります) Similaria 同様の質問がいくつかあるようです。ここに私の認識された違いがあります(私は悟りに開いています): 「検索コマンドで見つかりファイルを開くには、」からパイプにファイル名を1行の作成に焦点を当てfindにvim(または何でも)。私の場合、私はfind最初に、後で(いわば)パイプをしたいと思います。私のキャプチャ/使用は厳密に後に発生します。 「コマンドリンドからの最後の出力を再利用する」は大げさなようですが、単にコマンドを繰り返すようで、出力のN番目の行をキャプチャすることについては話していません。率直に言って、それは私を怖がらせます。 「Bashビルトインの複数行出力をキャプチャする」は近いですが、完全にはありません。 「端末、シェル、tty、コンソールなどの正確な違いは何ですか。」これは本当に良い読み物です。 ご協力ありがとうございました!私が90年代の10代のときに* nix / BSDを使用していて、プラグアンドプレイサウンドカード用のドライバーをインストールするのに役立つように燃え尽きてアシッドヘッドの隣人を呼んで怖がってしまったので、コマンドについて話し合うと安心しました。 (恐らく)恐ろしい個人が少ない特徴点を並べます。戻ってきて気持ちいいです。

2
ファイル名にスペースがあるスクリプトの問題
scpがリモートホストからローカルにファイルを戻すスクリプトを持っています。ファイル名にスペースが含まれている場合があります。scpは、ファイル名にスペースが含まれていないことを好みません。何らかの理由で、スペースを処理する私の試みは正しいscpパスをもたらしませんでした。 コード: PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg scp $PATH Me@10.1.10.33:/Users/Me/Desktop 結果 Cannot find directory: var/root/Documents/MyFile Cannot find directory: OG-v1.2.3.pkg PATHを引用符で囲むと"$PATH"、同じエラーが発生します。 エスケープされたスペースとスペースの交換も機能しませんが、私が知る限り、次のようにする必要があります。 ESC_PATH=${PATH/' '/'\ '} エスケープされたパスを印刷すると、編集が機能したことが示されますが、 echo $ESC_PATH &gt; /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
キーストロークでBashスクリプトから呼び出されたタイムアウトを強制終了できないのはなぜですか?
[編集:これは、生成されたすべてのプロセスを強制終了する方法を尋ねる他のいくつかの質問に似ています。答えはすべてpkillを使用することのようです。したがって、私の質問の核心は次のようになるかもしれません。スクリプトによって生成されたすべてのプロセスにCtrl-C / Zを伝播する方法はありますか?] coreutils(ここで説明)からrecのtimeoutコマンドでSoX を呼び出す場合、Bashスクリプト内から呼び出された後、キーストロークでSoX を強制終了する方法はないようです。 例: timeout 10 rec test.wav ... bashからCtrl+ CまたはCtrl+を使用Zして強制終了できますが、スクリプト内から呼び出された場合は強制終了できません。 timeout 10 ping nowhere ...で殺さすることができますCtrl+ CまたはCtrl+ Zのbashから、としてCtrl+ Zそれは、スクリプト内から実行していますとき。 プロセスIDを見つけてそのように強制終了することはできますが、標準のブレークキーストロークを使用できないのはなぜですか。そして、私ができるようにスクリプトを構成する方法はありますか?

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