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

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

2
ファイルを連結する最速の方法
合計20GBを超える1万個以上のファイルがあり、それらを1つのファイルに連結する必要があります。 より速い方法はありますか cat input_file* >> out ? 推奨される方法はbashコマンドです。Pythonは、かなり遅くなければ受け入れられます。
25 bash  shell-script  files  cat 


2
Bashスクリプト-戻り値が0になるまでループする
スクリプトで何かをアンマウントする必要がありますが、すべてのデータのコピーが完了してアンマウントが失敗する前にアンマウントされることがあります。「ブロッキング」マウントを行う方法を探しましたが、何も見つかりませんでした。そのため、アンマウントできるようになるまでループするスクリプトを作成しようとしましたが、機能しません。 while [ `sudo umount mount` ] do sleep 0.1 done rmdir mount 実行出力の場合: umount: /home/evantandersen/mount: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) rmdir: failed to remove `mount': Device or resource busy の戻り値sudo umount mountが0になるまでループしないでください。つまり、正常にアンマウントされました。

10
EOFで複数の改行を削除する方法は?
1つ以上の改行で終わるファイルがあり、1つの改行のみで終わる必要があります。Bash / Unix / GNUツールを使用してこれを行うにはどうすればよいですか? 不良ファイルの例: 1\n \n 2\n \n \n 3\n \n \n \n 修正されたファイルの例: 1\n \n 2\n \n \n 3\n 言い換えると、EOFとファイルの最後の非改行文字との間に改行が1つだけあるはずです。 参照実装 ファイルの内容を読み取り、最後にさらに2つの改行がなくなるまで1つの改行を切り取り、書き戻します。 #! /bin/python import sys with open(sys.argv[1]) as infile: lines = infile.read() while lines.endswith("\n\n"): lines = lines[:-1] with open(sys.argv[2], 'w') as outfile: for line in lines: …
25 bash  sed  awk  ed 

6
拡張子の前にファイル名にテキストを追加する
ファイル名の最後に、拡張子の前にテキストを追加したいと思います。今、私はしようとしています、 for f in *.shp; do echo $f_poly; done 出力は、 Quercus_acutifolia.shp_poly Quercus_agrifolia.shp_poly Quercus_corrugata.shp_poly Quercus_cortesii.shp_poly Quercus_costaricensis.shp_poly Quercus_havardii.shp_poly Quercus_hemisphaerica.shp_poly Quercus_kelloggii.shp_poly Quercus_knoblochii.shp_poly Quercus_laceyi.shp_poly なりたい Quercus_acutifolia_poly.shp Quercus_agrifolia_poly.shp Quercus_corrugata_poly.shp Quercus_cortesii_poly.shp Quercus_costaricensis_poly.shp Quercus_havardii_poly.shp Quercus_hemisphaerica_poly.shp Quercus_kelloggii_poly.shp Quercus_knoblochii_poly.shp Quercus_laceyi_poly.shp
25 bash  rename  filenames 

2
bash履歴検索モードを終了する方法は?
Ubuntu 12.04ではCTRL- を使用Rして、逆履歴検索を入力します。私が欲しいのコマンドは、(反復後に発見されていない場合はCTRL- R、どのように私はすぐにコマンドラインに入力するか、または実行されていない歴史的なコマンドを使用して、コマンドプロンプト(空)に戻って終了しますか)?

6
ウィンドウマネージャキーバインドから最後に使用したディレクトリと同じディレクトリで新しいターミナルを開くにはどうすればよいですか?
タイリングウィンドウマネージャーを使用しておりgnome-terminal、複数のタブからurxvtウィンドウマネージャーによって管理される複数のインスタンスに切り替えました。私が見逃している機能の1つは、最後の作業ディレクトリにデフォルト設定される新しいターミナルを開く機能です。 要するに:私は新しいurxvt(bashの)最後に使用された1の$ PWDデフォルトことを開くための方法が必要です。 私の頭に浮かぶ唯一の解決策はcd、次のようなものですべての現在のパスを保存することです: echo $PWD > ~/.last_dir この方法で新しい端末のパスを復元します。 cd `cat ~/.last_dir` 2番目のコマンドをソースにすることはできますが、.bashrcディレクトリが変更されるたびに最初のコマンドを実行する方法がわかりません:) 使用screenやtmux使用を伴わない簡単なソリューションは歓迎します。

1
バックグラウンドで実行するコマンドのエイリアス
キーボードショートカットが機能するようにしたい: > e foo.txt として展開する > emacs foo.txt & を使用するのは簡単ですが、ファイル名alias e=emacsの&後に挿入するにはどうすればよいですか?だけaliasでは使用できない可能性があるので、bashソリューションを受け入れます。シェルスクリプトが必要な場合は、その仕組みを説明してください。
25 bash  alias 

6
bashの履歴リストのサイズを5000行以上に設定する方法はありますか?
この質問は、UnixおよびLinux Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 HISTSIZE環境変数を5000より大きく設定しても、history組み込みの履歴リストを印刷すると、最後の5000コマンドのみが印刷されます。多くの場合、.bash_history5000行を超える大きな行があり、を押して初期コマンドに対処する必要Ctrl-Rがある場合がありますが、そのコマンドが5000コマンドを超える場合は、そのメカニズムを使用してアクセスできません。私は、私が使用することができます知っているgrep上で.bash_history、しかし、私は思うCtrl-Rのメカニズムがはるかに速く(便利)になります。私はgnu bashバージョン4.1を使用します。 これが私の.bashrcファイルの完全なコンテンツです。 #!/bin/bash # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything [ -z "$PS1" ] && return # don't put duplicate lines in the history. …
25 linux  bash  shell 


2
「」を含む文字列内に変数を挿入する方法は?
変数を挿入してxml文字列を作成したい: str1="Hello" str2="world" xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>' echo $xml 結果は <?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2> しかし、私が得るのは: <?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2> 私も試しました xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" しかし、それは内側の二重引用符を削除し、以下を与えます: <?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
25 bash  shell  variable  xml 

3
zipを使用する場合、コマンドラインをあふれさせることなく全体的な進行状況を表示するにはどうすればよいですか?
固定長のプログレスバー、ファイルまたはバイトカウント、さらに良いことに、残りの推定時間を示すタイマーが理想的です。 zipの標準的な動作は、処理されたすべてのファイルの行を印刷するようですが、何千ものファイルを圧縮するときにその情報が過負荷になるのは望ましくありません。どれくらいの時間がかかるかを推測したい。 -q(--quiet)オプションと-dg(--display-globaldots)を組み合わせて試しましたが、stdoutに複数行のドットがあふれてしまい、有用な表示がありません。 私も-qdgds 10mマニュアルページで述べたように試しましたが、同じ結果を得ました。 次に-db(--display-bytes)と-dc(--display-counts)を試しましたが、グローバルオプションはないようです。そのため、すべてのファイル名に対して再度出力します。 最後に、-qlike とともに試してみました-qdbdcが、何も出力されません。 Funnily十分に、私が言及している情報ジップサイト上のmanページを発見した-de(--display-est-to-goはずです)オプション「アーカイブ操作を完了する時間の推定値を表示します。」 それは私が望むものとまったく同じように聞こえますが、問題は私のバージョンzipがその機能を持っていないことです。Ubuntu 14.04.1 64ビット、bash-4.3.30(1)およびzip-3.00を使用しています。ウィキペディアによると、これはzipの最新の安定版リリースです。 info-zip sourceforgeページには未リリースのベータ版がありますが、データをベータ版に委ねたくありません。

5
bashスクリプトの代わりにzshを使用することをお勧めしますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5日前に閉鎖されました。 zshスクリプトを実行するのに十分な人がインストールされていると仮定できますか? #!/usr/bin/env zsh シバンとして? または、これにより、スクリプトが非常に多くのシステムで実行できなくなりますか? 明確化:エンドユーザーが実行したいプログラム/スクリプトに興味があります(Ubuntu、Debian、SUSE、Arch&cなど)。

5
コマンドをテストして検索する場合、bashを使用するにはどうすればよいですか?
クラッシュログのあるディレクトリがあり、findコマンドに基づいてbashスクリプトで条件文を使用したいと思います。 ログファイルは次の形式で保存されます。 /var/log/crashes/app-2012-08-28.log /var/log/crashes/otherapp-2012-08-28.log 最後の5分間に変更された特定のアプリのクラッシュログがある場合にのみifステートメントがtrueを返すようにします。find私が使用することをコマンドは次のとおりです。 find /var/log/crashes -name app-\*\.log -mmin -5 それをifステートメントに適切に組み込む方法がわかりません。私はこれがうまくいくと思う: if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then service myapp restart fi 不明な点がいくつかあります。 私はifフラグを見ましたが、もしあれば、どれを使うべきかわかりません。 testディレクティブが必要ですか、それともfindコマンドの結果に対して直接処理する必要がありますか、それともfind... | wc -l代わりに行カウントを取得するために使用する必要がありますか? この質問に答えるために100%必要というわけではありませんがtest、コマンドが返すリターンコードに対するテストのためですか?そして、それらは目に見えないようなものです- stdout/ stderr?このmanページを読みましたが、いつ使用するtestか、どのようにデバッグするかについてはまだはっきりしていません。


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