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

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

3
変換せずにバイトを逐語的にコピーするために、bashでバイナリを使用するにはどうすればよいですか?
私は、無数の理由でc ++コードをbashに変換しようと野心的に取り組んでいます。 このコードは、完全にバイナリで記述および構造化されたサブフィールドに固有のファイルタイプを読み取り、操作します。最初のバイナリ関連のタスクは、ヘッダーの最初の988バイトをそのままコピーし、残りの情報を生成しながら書き込みを続けることができる出力ファイルに入れることです。 私の現在のソリューションは機能していないと確信しており、現実的にはこれを判断するための良い方法を見つけていません。したがって、実際に正しく記述されていても、これをテストする方法を確認する必要があります! これは私が今やっていることです: hdr_988=`head -c 988 ${inputFile}` echo -n "${hdr_988}" > ${output_hdr} headInput=`head -c 988 ${inputTrack} | hexdump` headOutput=`head -c 988 ${output_hdr} | hexdump` if [ "${headInput}" != "${headOutput}" ]; then echo "output header was not written properly. exiting. please troubleshoot."; exit 1; fi hexdump / xxdを使用してファイルのこの部分をチェックアウトすると、ほとんどの部分を正確に読み取ることはできませんが、何かがおかしいようです。また、比較のために記述したコードは、2つの文字列が同一であるかどうかだけを示しており、希望どおりにコピーされているかどうかは示していません。 これをbashで行うより良い方法はありますか?native-binaryのバイナリバイトをそのままコピー/読み取りして、そのままファイルにコピーできますか?(そして理想的には変数としても保存すること)。
14 bash  binary  head 

4
CentOS 7でのBashの完了は非常に不完全です
を使用してbash補完をインストールしましたyum install --enablerepo=epel bash-completion。いくつかの基本的なコマンド(git&yum)で機能しますが、完成版の大部分が欠落しています。 私/etc/bash_completion.dには次のものが含まれています: bash_completion.d] $ ls git iprutils redefine_filedir yum yummain.py yum-utils.bash ただし、make(インストールされている)にはbash_completionがあり、さらに多くの場合は、ここのサンプル出力と比較してください。 不足しているコンプリータースクリプトを取得するにはどうすればよいですか?(できればyumで、手動で更新する必要はありません) 重要な場合:タブ補完は機能しますが、.bashrcには何も入力していません。パッケージをインストールした後、動作を開始しました。 更新: bash完了のバージョンを確認した後、@ fduffが示唆したようにインストールしましたので、以下を見ました: $ yum list installed | grepの完了 bash-completion.noarch 1:2.1-6.el7 @base しかし、それをアンインストールしてEPELリポジトリからbash_completionをインストールするには、CentOSのを強制しようとしてsudo yum install --enablerepo=epel bash-completion --disablerepo=base得られましたpackage not found。 さらに、チェックがあることが得られた新しいパッケージ完了ファイルがに@Baseプットになりました/usr/share/bash-completion/completionsが、私はまだ、すなわち、いくつかをしないのです、sshとsudo(のようなものはそれが吸うsudo command [tab]完全しばらくはないcommand [tab]、さらに私はのためのビットを見つけることができませんsitll、ありません)make(にあるターゲットをリストする必要がありますMakefile) 更新2:変更 ログの状態: 2013年11月1日金曜日Petr Stodulka-2.1-6 「tar」なしで利用可能な補完のみをインストールし(#810343-コメント15)、もう一方を削除します。 2013年9月13日金曜日Roman Rakus-2.1-5 欠落している条件解決をもう1つ追加しました:#1007839 2013年9月13日金曜日Roman …

5
長いパスで最初に見つからないディレクトリを見つけるにはどうすればよいですか?
存在しないパスがあると想像してください: $ ls /foo/bar/baz/hello/world ls: cannot access /foo/bar/baz/hello/world: No such file or directory しかし、存在すると/foo/bar しましょう。それbazがパスのブレークポイントであると判断する簡単な方法はありますか? 私はBashを使用しています。
14 bash  shell  directory  ls 

8
チェック変数はシェルのようなBourneの配列ですか?
配列変数をサポートするBourne like shellでは、変数が配列であるかどうかを確認するために何らかの解析を使用できます。 以下のすべてのコマンドは、実行後に実行されましたa=(1 2 3)。 zsh: $ declare -p a typeset -a a a=( 1 2 3 ) bash: $ declare -p a declare -a a='([0]="1" [1]="2" [2]="3")' ksh93: $ typeset -p a typeset -a a=(1 2 3) pdksh およびその派生物: $ typeset -p a set -A a typeset a[0]=1 …
14 bash  shell  zsh  ksh  yash 

3
「find -exec」はどのようにファイル名にスペースを渡しますか?
名前にスペースが含まれるファイルを含むディレクトリがある場合、たとえば $ ls -1 dir1 file 1 file 2 file 3 これらすべてを次のように別のディレクトリに正常にコピーできます。 $ find dir1 -mindepth 1 -exec cp -t dir2 {} + ただし、の出力にfind dir1 -mindepth 1はエスケープされていないスペースが含まれます。 $ find dir1 mindepth 1 dir1/file 1 dir1/file 3 dir1/file 3 のprint0代わりに使用する場合print、出力にはエスケープされていないスペースが含まれています。 $ find dir1 mindepth 1 -print0 dir1/file 1dir1/file 2dir1/file 3 を使用してこれらのファイルを手動でコピーcpするには、スペースをエスケープする必要があります。しかし、私がコマンドを使用するか、コマンドの最後に関係なく、cpの引数が来るとき、これは不要であるようです。find+\; …

2
大きなワードリストで重複を削除する最も速い方法は?
大きなワードリストを重複排除する必要があります。いくつかのコマンドを試して、こことここでいくつかの研究を行いました。そこでは、単語リストを重複排除する最も速い方法はawkを使用しているように見えることを説明しています。 awk-> O(n)?sort-> O(n log n)? しかし、これは真実ではないようだ。私のテスト結果は次のとおりです。 sort -u input.txt -o output.txt 実数0m12.446s ユーザー0m11.347s sys 0m0.906s awk '!x[$0]++' input.txt > output.txt 実数0m47.221s ユーザー0m45.419s sys 0m1.260s したがって、sort -uを使用すると3.7倍高速になります。どうしてこれなの?重複排除を行うためのさらに速い方法はありますか? ***********アップデート******** 誰かがコメントで指摘したように、私の単語リストはすでにある程度ソートされている可能性があります。この可能性を排除するために、このPythonスクリプトを使用して 2つのワードリストを生成しました。 List1 = 7 Mb List2 = 690 Mb 結果AWK: List1を リアル0m1.643s ユーザー0m1.565s sysの0m0.062s List2 実2m6.918s ユーザー2m4.499s sys 0m1.345s 結果SORT: List1 …
14 bash  awk  performance  sort 


1
systemdサービスファイル内でbashパラメーターの展開が機能しないのはなぜですか?
私が使用しようとしていますsystemdのがEnvironmentFile、それがファイルに設定されている場合、コマンドにオプションを追加します。ユニットファイルには次のものがあります。 ExecStart=/usr/bin/bash -c "echo ${PORT:+port is $PORT}" サービスを開始しても何もエコーしません。 以下は期待どおりに機能します。 ExecStart=/usr/bin/bash -c "echo port is $PORT" これは、ファイルが正しく読み取られることを意味します。 パラメーターの置換はコマンドラインでも機能します。 $ PORT=1234 bash -c 'echo ${PORT:+port is $PORT}' port is 1234 私は何が欠けていますか?

1
1つの端末を終了するときに他の端末のbash履歴を更新する
ここで求められているように私は、この質問が曖昧にされていません知って更新し続ける(と重複こちら)。 私が達成しようとしていることは少し異なります。入力するたびlsにプロンプトをファイルに書き換えるという考えが好きではありません(history -a; history -c; history -r)。 終了時にファイルを更新したいと思います。それは簡単です(実際にはデフォルトです)が、書き換える代わりに追加する必要があります: shopt -s histappend ここで、端末が閉じられたときに、更新を認識できるように、開いたままになっている他のすべてのものを作成したいと思います。 入力$PS1するたびにチェックすることなくこれを行うことを好みcommandます。何らかの信号をキャプチャする方が良いと思います。どうしますか?不可能な場合は、おそらく簡単cronjobですか? このパズルをどのように解決できますか?

1
ディレクトリ内の2つの同一ファイルを示す「ls」
だからどういうわけか、コマンドlsはディレクトリ内の2つの同一のファイルを表示しているようです。 $ ls -Blah /System/Library/LaunchDaemons total 32 drwxr-xr-x 266 root wheel 8.8K Jun 18 10:41 . drwxr-xr-x 79 root wheel 2.6K Mar 31 12:28 .. [redacted] -rw-r--r-- 1 root wheel 715B Jun 18 10:36 tftp.plist -rw-r--r-- 1 root wheel 715B Jun 18 10:35 tftp.plist ファイルの1つを移動、名前変更、編集などできますが、もう1つはそこにあるようにも見えません。bashタブ補完でも同じファイルが表示されます。 たとえば、次を入力してからヒットする TAB $ sudo mv …
14 bash  osx  ls 

1
nohupでのbash時間
nohupで何かを実行するのにかかる時間を知りたい。私はこれが機能することを知っています: $ time sleep 2 real 0m2.001s user 0m0.000s sys 0m0.001s しかし、なぜnohupで機能しないのでしょうか? $ nohup time sleep 2 & [1] 29456 $ nohup: ignoring input and appending output to 'nohup.out' nohup: failed to run command 'time': No such file or directory [1]+ Exit 127 nohup time sleep 2
14 bash  time 

1
誰かがflockとファイル記述子を使用してファイルをロックし、ロックされたファイルに書き込む方法を説明できますか?
このflockツールは初めてであり、私が知っている限りではファイル記述子を使用したことがないので、気をつけてください。 cURLリクエストを作成し、出力をというファイルに書き込むbashスクリプトがありますresp.txt。複数のユーザーがスクリプトを実行して同時にテキストファイルを編集することを心配せずに、そのファイルに書き込むことができるように、排他ロックを作成する必要があります。 ファイルをロックし、リクエストを実行し、テキストファイルに書き込むコードは次のとおりです。 ( flock -e 200 curl 'someurl' -H 'someHeader' > resp.txt ) 200>/home/user/ITS/resp.txt これはこれについて正しい方法ですか?私の実際のスクリプトはこれより少し長いですが、flock構文をbashスクリプトに追加すると壊れるようです。 誰かがこれらのファイル記述子がどのように機能するかを説明し、私がファイルを正しくロックしているかどうかを教えてくれたら素晴らしいでしょう!
14 linux  bash 

4
小文字/大文字の単語のすべての可能な組み合わせを取得します
特定の単語、たとえばharleyのすべての可能な小文字および大文字の順列を出力するbashスクリプトを作成したい: harley harleY harlEy harLey ... HARLey HARLEy HARLEY 私の素朴な解決策は、この特定の単語のネストされたforループをn番目(nはlen(word))に書くことです: #!/bin/bash for a in {h,H}; do for b in {a,A}; do ... done done ただし、別の単語のスクリプトを再度コーディングする必要があります。 これを達成するためのより良い方法はありますか?
14 bash  string 

3
ターミナルからGUIを起動するときに煩わしさを解消する方法は?
グラフィカルデスクトップを使用するよりも、ターミナルウィンドウからGUIアプリケーションを起動することを好みます。頻繁に迷惑なのは、開発者がこのタイプの使用を予期していないことが多いため、アプリは多くの役に立たない、不可解な、または情報のないメッセージをstdoutまたはstderrに出力することです。バックグラウンドでプログラムを実行し、&を付けてジョブの作成と終了のレポートを生成するため、ターミナルでさらに混乱が生じます。 コマンドライン引数を受け入れ、オートコンプリートを処理するこれらの問題の回避策は何ですか? 関連:https : //stackoverflow.com/questions/7131670/make-bash-alias-that-takes-parameter

1
bashで複数のhere-docsを使用することは可能ですか?
複数のヒアドキュメントを使用して、bashのコマンドに入力を提供できますか? $ cat <<<foo <<<bar bar $ cat <<EOF1 <<EOF2 > foo > EOF1 > bar > EOF2 bar 明らかに、どちらの場合でも、2番目のhere-docはstdinとして使用され、最初の参照を置き換えます。echo代わりにs を使用するソリューションですか? $ cat <(echo -n foo) <(echo bar) foobar また、何らかの理由で、組み合わせを使用してもうまくいきませんでした。どうしてですか? $ cat <<<foo <(echo bar) bar $ cat <(echo -n foo) <<<bar foo

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