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

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

5
Chrome OSでは、Bashはスクリプトを実行しません。Bashでスクリプトを実行するにはどうすればよいですか?
foo.sh現在のディレクトリにファイルがあります。実行しようとすると./foo.sh、次のようになります: -bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied しかし、実行する/bin/sh ./foo.shと問題なく実行されます。 これを修正して実行できるようにするにはどうすればよい./foo.shですか?/ bin / shで自動的に実行されますか? 編集:さて、これはChrome OSで、この特定のフォルダーはでマウントされていnoexecます。どうやらそれだけで実行する機能を妨げる./foo.sh; しかし、なぜですか?sh foo.shまったく同じことを達成するためにまだ実行できるのはなぜですか?それでは、どのようなセキュリティがnoexec提供されますか?
16 bash  chrome-os 

6
前のコマンドの出力からのテキストを使用する
編集2015年4月:これと同じ質問がある場合は、http://xiki.org/も確認することをお勧めします 私はこれが端末の仕組みではないことを知っていますが、以前のコマンド出力から端末ウィンドウの履歴にすでにあるテキストを使用する簡単な方法(コピー、変更など)が欲しいと思うことがよくあります。 私はこのように想像しました: 私はbashシェルでコマンドを入力しようとしていますが、数行上の画面にすでにあるものを入力する必要があることに気付きました。マウスに手を伸ばして選択することはできますが、それは嫌いです。現時点で私が本当に望むのは、端末全体が巨大なVimバッファーになったことです。そのすべてが、プロンプト、入力したコマンド、およびそれらのコマンドからの出力です。すべて。そして、数行上にジャンプし、少し編集して、テキストをヤンクすることができました。次に、bashシェルモードに戻り、ヤンクしたものを現在のコマンドラインに貼り付けます。 私はいくつかのオプションがあることを知っています: 当然、必要なテキストをいくつかのコマンドの出力から直接ファイルにパイプするか、次のコマンドに直接パイプします。ただし、そのためには、事前に計画するか、履歴からコマンドを再実行する必要があります(呼び出し間で出力が変更されないと仮定します)。 マウスに手を伸ばして、コピーするテキストを選択するには。ラメ、迷惑な、私はそれをやらなかったらよかったのに(これはGUIスタック交換サイトではありませんか?=) (Mac OS X)ターミナルアプリケーションの[テキストをエクスポート...]オプションを使用して、ターミナルテキストをファイルに保存するには。次に、ファイルを開いて操作します。ほとんど、しかし、なぜディスク上のファイルに保存するステップを経るのですか? 質問は次のとおりです。この状況で何をしますか?このシナリオで役立つトリック、ツール、シェル機能はありますか?マウスを使用するために自分を辞任するか、入力する必要があるものを再入力しますか? 問題は、「Unixの方法」ではないことですが、これは2010年であり、カーソルから数行離れたテキストを簡単にコピーできないことでしょうか?

3
bashはxargs grepを1回だけ検索します
多分それは少し奇妙です-そして多分これを行うための他のツールがありますが、まあ.. 次の古典的なbashコマンドを使用して、文字列を含むすべてのファイルを検索しています。 find . -type f | xargs grep "something" 複数の深さで、非常に多くのファイルがあります。「何か」が最初に現れるだけで十分ですが、findは検索を続け、残りのファイルを完了するのに長い時間がかかります。私がやりたいのは、grepから検索への「フィードバック」のようなもので、findが他のファイルの検索を停止できるようにすることです。そのようなことは可能ですか?
16 bash  find  grep  xargs 

5
BASH連想配列印刷
すべての要素をループすることなく、配列全体([key] = value)を印刷する方法はありますか? いくつかの要素を持つ配列を作成したと仮定します。 declare -A array array=([a1]=1 [a2]=2 ... [b1]=bbb ... [f500]=abcdef) 配列全体を印刷して戻すことができます for i in "${!array[@]}" do echo "${i}=${array[$i]}" done ただし、bashはすべての配列要素を1つの "go"(キー${!array[@]}と値の両方)で取得する方法を既に知っているようです${array[@]}。 ループなしでこの情報をbashに出力させる方法はありますか? 編集: typeset -p arrayそれは! ただし、1回の置換でプレフィックスとサフィックスの両方を削除することはできません。 a="$(typeset -p array)" b="${a##*(}" c="${b%% )*}" 出力のキー=値部分のみを取得/印刷するよりクリーンな方法はありますか?

4
ビット単位シフトとBashの最大整数
これは探索の質問です。つまり、この質問が何であるかは完全にはわかりませんが、Bashの最大の整数に関するものだと思います。とにかく、表向きに定義します。 $ echo $((1<<8)) 256 ビットをシフトして整数を生成しています。どこまで行けますか? $ echo $((1<<80000)) 1 これまでのところ、どうやら。(1は予想外であり、私はそれに戻ります。)しかし、 $ echo $((1<<1022)) 4611686018427387904 まだポジティブです。ただし、これではありません: $ echo $((1<<1023)) -9223372036854775808 そしてさらに一歩先へ、 $ echo $((1<<1024)) 1 なぜ1ですか?そして、なぜ次の? $ echo $((1<<1025)) 2 $ echo $((1<<1026)) 4 誰かがこのシリーズを分析したいですか? 更新 私のマシン: $ uname -a Linux tomas-Latitude-E4200 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC …
16 bash  arithmetic 

1
pushd、popd vs cd、cd- in bashおよびzsh
bashとzshのpushd / popdの動作に違いはありますか?zsh cdでは、cd-はpushd / popd(cdのときにディレクトリを自動的に追加/ポップします)とまったく同じように動作しますが、bash cdではdirスタックに影響しません。 誰かが私に素晴らしいポインタをくれるとしたら。
16 bash  zsh  cd-command  pushd 

6
bashプロンプトで現在および親ディレクトリのみを表示する
私はbashが初めてであり、tcshで些細なことを表示するようにプロンプ​​トを表示したいのですが、良いGoogle検索を行ってもまだできません。 私のプロンプトには、次のように現在のディレクトリと親ディレクトリのみを含めるようにします。 /parent/currentdir $ tcshでは、これは以下によって達成されます。 set prompt = "%C2 %" ただし、これまでのところbashでは、同じ出力を取得するにはpwdを解析する必要があることしかわかりませんでした。 次のような簡単な方法はありませんか? export PS1="$(some_command) $"
16 bash  prompt 

5
文字列内の特殊文字をエスケープする方法は?
$fileたとえば、ファイル名の値を保持していると仮定しますDr' A.tif。bashプログラミングで、特殊文字$fileを削除せずに、単一引用符やその他の特殊文字をエスケープするにはどうすればよいですか? 2014年7月9日に更新 @Gillesからのリクエストとして、次のコードスニペットを処理できませんDr' A.tif。 files=$(find /path/ -maxdepth 1 -name "*.[Pp][Dd][Ff]" -o -name "*.[Tt][Ii][Ff]") echo "${files}" > ${TEMP_FILE} while read file do newfile=$(echo "${file}" | sed 's, ,\\ ,g') ## line 1 done < ${TEMP_FILE} 私が試した後@Patrickからの回答を上line 1、私のために動作するようです。しかし、のようなファイルがある場合Dr\^s A.tif、printfコマンドは役に立たないようですDr\^s\ A.tif。次のようにコンソールで手動で試してみると: printf "%q" "Dr\^s A.tif" この出力があります: Dr\\\^s\ A.tif これを処理する方法はありますか?
16 bash 

5
Bash:タイプ(Bashビルトイン)の使用とは何ですか?
私が見つけたBashスクリプトのコマンドに出会いました: find /var/log/abcd -type f 上記のコマンドは、ログファイルのクリーニングに関連しています。私は何をするのか知ってfindいます。 を見て-type f、マニュアルページを探しました。BASH_BUILTINS(1)の manページで見ることができました typeコマンドでの-fフラグの説明は次のとおりです。 The -f option suppresses shell function lookup, as with the command builtin. 以下は私の質問です。 の使用はtype何ですか? -f旗の意味は何ですか? typewith findコマンドの使用法は何ですか? [編集]:-これまでのすべてのコメントと回答を読んだ後、-type option in command findVsの誤解の原因について言及したいと思いtype commandます。これは、すべて私が想定したために起こったと日付までだけ短いオプション(の場合のテスト見ているfindと、コマンド)-シングルマイナス記号「」、例をls -l。ほとんどの時間の私が持つ長いオプション見てきました「 - 」二重のマイナス記号、一例を、ls --version。
16 bash  bash-script 

2
bash_history:危険なコマンドをコメントアウト: `#`
bash履歴に「危険な」コマンドが記録されないように、.bashrcファイルに次の行を追加しました。 HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*' これはうまく機能しますが、副作用があります。マシンで実行されたコマンドの完全な履歴が表示されません。実験用に複数のマシンがあり、実行されたすべてのコマンドを表示できるようにしたいとします。bash internal historyを使用して実行されたコマンドを表示し、おそらく今日の日付のgrepを使用します。 history | grep Sep-28 私がしたいのは、「危険な」コマンドもログに記録#することですが、行の先頭にa を付けて、誤って履歴からコマンドを実行しても、損害が発生しないようにすることです。 これが可能かどうかはわかりません。 更新と説明: これが私にとって問題である主な理由は、私は通常複数の端末からマシンに接続されており、1つの端末で実行されたコマンドはすぐに他の端末の履歴に読み込まれるからです。これは以下によって達成されます PROMPT_COMMAND="history -a; history -c; history -r" 私が2つの端末を開いていると想像してみましょう。1つでは、いくつかのcat /dev/foo > file.outプロセスを実行しています。2番目では、で進行状況を確認しls -lAhFます。and (つまり、履歴の最後のコマンド)をls押して繰り返します。すぐに最初のコマンドが終了するなどとして、歴史からの最後のコマンドは、もはやありませんが、。注意しないと、catを再び起動してfile.outを上書きします。UpENTERlscat /dev/foo > file.out 私が達成したいのは、catコマンドの前にを付けて#、実行されないようにすることです。しかし、私はまだ履歴に表示し、コメントを外すことで(長いコマンドの場合)再利用できます。

3
バージョン4.2より前のBashでnounsetシェルオプションを使用して変数が定義されているかどうかをテストするにはどうすればよいですか?
「GNU bash、バージョン4.2」より前のBashバージョンの-v場合、testコマンドのオプションに同等の代替手段はありますか?例えば: shopt -os nounset test -v foobar && echo foo || echo bar # Output: bar foobar= test -v foobar && echo foo || echo bar # Output: foo
16 bash  test 

3
bashのメタキーとは何ですか?
私が使用しようとxmodmapマッピングするためMETA_LにMENUキーが、に受け入れられていないようですbashメタキーとして。ですから、これらのコンポーネント(キーボード、X、xterm、bash)がメタキーとスーパーキーに関してそれぞれにどのように関係しているか疑問に思っています。任意の説明をいただければ幸いです。 別の言い方をしましょう。たとえば、bashのマニュアルページには、関数yank-nth-argがバインドさM-C-yれており、を押すと機能することが記載されていEsc-Control-yます。しかし、これは少し面倒です。だから、どのようにbash がすべてのデフォルトのバインディングとしてMeta(などのMenu)別のキーを受け入れることができますか?

4
ディレクトリ内のファイル名のオートコンプリート
この質問は非常によく似ているこのいずれかが、私は解決策を理解することはできません。私もこのチュートリアルを知っていますが、それでも私が間違っていることを理解できません。 私はに配置されているディレクトリのリストを自動補完しようとしています/something/: $ ls /something/ One Other Three これが起こる方法で: $ hi [TAB] One Other Three $ hi O[TAB] One Other 最初の言葉がhi中だけではなく、ときだけ/something/。 これは私がやっていることです.profile: _codeComplete() { local cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen `ls /something/` -- $cur) ) } complete -F _codeComplete "hi "

4
sedを使用したbash変数の処理
bash変数LATLNGには、そのような括弧内に緯度と経度の値が含まれています (53.3096,-6.28396) 私はこれらをLATとLONと呼ばれる変数に解析したいので、sedを介してそうしようとしています LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG") LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG") ただし、次のエラーが表示されます。 sed: can't read (53.3096,-6.28396): No such file or directory

4
変数をループする
約20の異なるサーバーでrsyncを使用してファイルを更新するbashスクリプトを書いています。 rsyncの部分を把握しました。私が問題を抱えているのは、変数のリストを調べることです。 これまでの私のスクリプトは次のようになります。 #!/bin/bash SERVER1="192.xxx.xxx.2" SERVER2="192.xxx.xxx.3" SERVER3="192.xxx.xxx.4" SERVER4="192.xxx.xxx.5" SERVER5="192.xxx.xxx.6" SERVER6="192.xxx.xxx.7" for ((i=1; i<7; i++)) do echo [Server IP Address] done どこ [Server IP Address]関連する変数の値はべきか。したがって、i = 1の場合、$ SERVER1の値をエコーする必要があります。 これを含むいくつかの反復を試しました echo "$SERVER$i" # printed the value of i echo "SERVER$i" # printer "SERVER" plus the value of i ex: SERVER 1 where …

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