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

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


3
端末セッションが画面内で実行されているかどうかを確認する方法
bashスクリプトを実行するときに、それが内で実行されているかどうかを確認できるようにしたいと思いますscreen。これは可能ですか? これ.bashrcは、セッションが画面内で開始されるかどうかに応じてコマンドプロンプトの色を設定できるようにするためです。 自分の答えが出たら、このリンクを見つけました。自分が画面にいるかどうかはどうすればわかりますか?

4
anonとしてコードブロックを渡します。関数
コマンドのブロックを無名関数として扱うことは可能ですか? function wrap_this { run_something # Decide to run block or maybe not. run_something else } wrap_this { do_something do_somthing else } # Do something else wrap_this { do_something_else_else do_something_else_else_else } (ブロックごとに関数またはファイルを作成すると思いますが、このオプションは特定の状況でより明確で読みやすいと思います。) whileでそれを行いdo/done、でfunctionそれを行い{ multiple lines }ます。BASHには匿名関数がないことに気づきましたが、関数を定義するときに行うことができるように、複数のコマンドを別の関数に渡すことは可能whileですか?
9 bash  function 

1
readlineの単語セパレータとは何ですか?
Bashで「単語」を削除する_と、やなどの特定の文字で停止し/ます。たとえば、 /foo/bar そしてアクティブ化backward-kill-word(通常Alt- Backspaceおよび/またはCtrl-にマッピングされwます)、残りのテキストは /foo/ 。これがないではないと対応$COMP_WORDBREAKSまたはreadlineさんrl_completer_word_break_characters。単語の区切りを決定するためにどの文字が使用されているか(おそらくオーバーライドされる可能性があるため、コードのデフォルトではなく、実行中のシステムで)どうすれば検出できますか?
9 bash  readline 

3
シェル全体のバックスラッシュの処理
どのようにechoしてprintf御馳走バックスラッシュでzsh、bashおよび他のシェル? 下ではzshの私は、次の動作を取得します: $ echo "foo\bar\baz" foaaz $ echo "foo\\bar\\baz" foaaz $ echo 'foo\bar\baz' foaaz $ echo 'foo\\bar\\baz' foo\bar\baz 下ではbashの、物事はもう少し一貫性のあるように見えます。 bash$ echo "foo\bar\baz" foo\bar\baz bash$ echo 'foo\bar\baz' foo\bar\baz bash$ しかし、もっと具体的に:どのように私は、次のようなバックスラッシュを含む文字列渡すことができ\\foo\bar\somethingました: echo printf print まったく同じ文字列を取得しますか?(zshとbash)? 次に、zshの関数の別の実験を示します。 function foo { echo -E '$1' } $ foo \\here\is\some\path $1 どうすれば印刷するだけ\\here\is\some\pathですか? 更新(注:これは現在、Stephaneのコメントで回答されています) 私はzsh 5.0.2で以下を試しました: function …
9 bash  shell  zsh  quoting 

2
BashでXDGディレクトリとパスを利用する方法は?
私はどのようにアクセスするには定義された変数だけでなく、不思議~/.config/user-dirs.dirsとxdg-user-dir、例えば"$(xdg-user-dir VIDEOS)"、だけでなく、次の標準の変数を: XDG_CACHE_HOME:-$HOME/.cache XDG_CONFIG_HOME:-$HOME/.config XDG_DATA_HOME:-$HOME/.local/share XDG_RUNTIME_DIR:-"/run/user/$USER" XDG_CONFIG_DIRS:-/etc/xdg XDG_DATA_DIRS:-/usr/local/share:/usr/share そのために、~/.bash_loginファイルで次のようにします。 # Define standard directories. declare -gx XDG_CACHE_HOME=~/.cache declare -gx XDG_CONFIG_HOME=~/.config declare -gx XDG_DATA_HOME=~/.local/share declare -gx XDG_RUNTIME_DIR="/run/user/$USER" declare -gx XDG_CONFIG_DIRS="$(IFS=: path /etc/xdg)" declare -gx XDG_DATA_DIRS="$(IFS=: path /usr/local/share:/usr/share)" # Source supplementary directories to export or overwrite existing standard ones. declare a="$XDG_CONFIG_HOME/user-dirs.dirs" if [[ …

2
`ls -l`のKiB範囲の異なる色
でファイルサイズの右から4番目、5番目、6番目の列を強調表示する正気な方法はありますls -lか?私の意図は、ファイルサイズをバイト、KiB、またはMiBで読みやすくすることです。-h旗については知っていますが、数字の長さ(大きさ)を見て見ているだけではなく、末尾の文字を解釈する必要がある方が煩雑であることがわかりました。これは、レースカーがデジタルではなくアナログダイヤルを使用するのと同じ理由です。 私のターゲットシェルはBashです。ありがとう。 編集:私は、サイズの列の数千、1万、および10万の場所を強調表示しようとしています。このように:123 456 789
9 bash  ls 

2
オプションの終わりに対処する方法— getoptsで
getoptsを使用してbashスクリプトの引数を解析します while getopts ":hd:" opt; do case $opt in d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done exeparams="$*" exeparams未解析のオプション/引数を保持します。exeparamsを使用して、スクリプト内で実行されるコマンドのオプションを保持したいので(スクリプト自体のオプションと重複する可能性があります)、スクリプトに渡されるオプションを終了するために-を使用します。私が通過した場合 myscript -d myscriptparam -- -d internalparam exeparams 開催します -- -d internalparam --これらの引数を内部コマンドに渡すために、先頭を削除したいと思います。これを行うためのエレガントな方法はありますか、または--getopts なしで残りだけを保持する文字列を取得できますか?
9 bash  getopts 

2
コマンド履歴の検索
を押して端末のコマンド履歴を検索しますが、次のCtrlr場合はどうなりますか。 This is an old command This is an | less -S older command を押してCtrlrから「this is an」と入力すると、古いコマンドは表示されますが、古いコマンドは表示されません。「this is an」コマンドをすべて検索するにはどうすればよいですか?同様のコマンドをすべてgrepなどにパイプすることは可能ですか? もし私がset -o viそれを元に戻すにはどうすればいいですか?

3
コマンド出力を改行で分割しますか?
複数の行を返すコマンドがあります。さらに処理するために、これらの行の各単一行を処理する必要があります。 私の現在のコードはIFS(内部フィールド区切り文字)を変更することで機能します。 ROWS=$(some command returning multiple lines) O=$IFS #save original IFS IFS=$(echo -en "\n\b") # set IFS to linebreak for ROW in ${ROWS[@]} do echo "$ROW" done IFS=$O #restore old IFS IFSを変更せずに、複数行出力の単一行にアクセスするより良い方法はありますか?特に、IFSを変更すると、スクリプトの読みやすさが低下します。 更新:チョロバからのものなど、回答を機能させるのに問題があります。 while IFS= read -r line ; do let var+=line #line 42 done << $(sqlite3 -list -nullvalue NULL …

2
CentOS 5.8のログイン時に取得されるシステムプロファイルはどこにありますか?
CentOSリリース5.8(最終)では、bashシステムプロファイルはどこにありますか? ですよ/etc/profileね? 〜/ .bashrcファイルをソースするために以下を追加しましたが、失敗するので運がありません。$ PS1を変更したので失敗します。 また、WHMをセットアップしているために発生する可能性もあると思います。
9 bash  centos  bashrc 

4
bash(またはその他)で変数環境変数を設定する
スクリプトで、設定する環境変数のキーと値のペアを含むファイルを読み取ってから設定する必要があります。 これまでのところ、私はこれを持っています: #!/bin/bash cat $1 | while read kv do key=${kv%=*} val=`echo ${kv#*=} | sed 's/^"\|"$//g'` export $key="$val" done そして、私はこのようなファイルを読みたいです: XAUTHLOCALHOSTNAME="localhost" DISPLAY=":0" XAUTHORITY="/tmp/some-XAuthority" スクリプトの実行中はスコープでこれらの変数のみが必要なので、親スコープのスクリプトで変数を設定する問題を解決する必要はありません。 私のテストから、私の問題はexport $key="$val"にあると思うので、その行の交換が必要だと思います。

2
インタラクティブSSHを使用してリモートホストでコマンドを実行する(条件付き)
リモートホストにログインするたびに、現在のインタラクティブなSSHセッション内でコマンドを自動的に実行できるようにしたいと思います。 何かのようなもの ssh user@remotehost [run do.sh] ここでdo.shは、いくつかのハウスキーピングタスクを実行してから、screenセッションに再接続します(現在do.sh、ホストにログインした後、手動で実行しています)。 .bashrc他のマシンからこのホストにdo.shログインし、そこからログインするときに実行したくないので、追加したくないので、オプションにする必要があります。

4
特定のファイルまたはディレクトリのエイリアスを設定するにはどうすればよいですか?
よく使うファイルがいくつかあります。たとえば、いくつかの構成ファイルまたはログファイル。Apacheのログファイルについて考えてみましょう。私は頻繁にしたいtailか、grepそれ。書く代わりに: tail -50 /var/log/apache2/error_log 私は書くことを好む tail -50 apachelog つまり、apachelogこのファイル名のエイリアスとして機能します。しかし、でエイリアスを定義する場合bashrc、それはコマンド全体である必要があります。後で参照できるように、(明らかに)ファイル名のエイリアスにすることはできません。これを達成する方法はありますか? 注:実行したいファイルやコマンドが多岐にわたるため、これらのさまざまなオプションのすべてに対して関数やエイリアスを作成することは、私の推奨する解決策ではありません。
9 bash  alias 

3
zshのエイリアスとbashのエイリアスの違い
調べてみましたが、決定的なものは見つかりませんでした。zshのエイリアスコマンドとbashのエイリアスコマンドに違いはありますか?そうでない場合は、2つのシェル間で一連のエイリアスを共有して、意図したとおりに機能することを期待できるということですか?
9 bash  zsh  alias 

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