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

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

5
システムへのログイン時に自動的にbash readlineをviモードに設定する方法は?
私のチームは何千ものLinux / Unixマシンを担当しているため、当然、rootアカウントは管理者間で「共有」されます。私はviモードを好み、他はemacsモードを好みます。 他の全員にviモードを使用するように強制せずに、どのマシンにSSHログインしたときに、bashのreadlineをviモードに設定するにはどうすればよいですか? 本質的には、set -o vi実際に毎回入力する必要がなく、他の人にそれを強制することなく、ログイン後の効果を持ちたいと思います(emacsモードは私に不快であるのと同じように、viモードはそれらに不快です)。 誰もがsudoで自分のアカウントを使用して特権コマンドを実行する場合、これは問題にならないことはわかっていますが、私の制御外の状況により、これは残念ながらオプションではありません。
9 bash  emacs  vi  readline 

3
findで見つかったファイルを引数として渡す方法は?
まず、些細なしかし不適当答え遮断する:私はどちらも使用することができますfind+のxargsトリックも(のようなその変種findとを-exec私は呼び出しごとにいくつかのような表現を使用する必要があるため)。最後にこれに戻ります。 より良い例として、次のことを考えてみましょう。 $ find -L some/dir -name \*.abc | sort some/dir/1.abc some/dir/2.abc some/dir/a space.abc それらを引数としてどのように渡すのprogramですか? それをするだけではうまくいきません $ ./program $(find -L some/dir -name \*.abc | sort) program次の引数を取得するため失敗します: [0]: ./program [1]: some/dir/1.abc [2]: some/dir/2.abc [3]: some/dir/a [4]: space.abc ご覧のとおり、スペースのあるパスは分割さprogramれており、2つの異なる引数と見なされます。 機能するまで引用する 私のような初心者ユーザーは、そのような問題に直面したときに、最終的に機能するまでランダムに引用符を追加する傾向があります-ここではそれだけでは役に立たないようです… "$(…)" $ ./program "$(find -L some/dir -name \*.abc | sort)" [0]: …


4
シェルプロンプトで引数を出力し、シェルプロンプトでそれらを書き込むように引用できますか?
シェルスクリプトでは、"$@"必要に応じて引用することで、スクリプトの引数に展開されます。たとえば、これはスクリプトの引数をgccに転送します。 gcc -fPIC "$@" <<<ただし、bashのpass-to-stdin構文を使用する"@$"と、期待どおりに機能しません。 #!/bin/bash cat <<< "$@" ./test.sh foo "bar baz"与えられたスクリプトを呼び出す foo bar baz 私は期待します foo "bar baz" シェルプロンプトでそれらを書くように、その引数を出力するシェルスクリプトを書く方法はありますか?たとえば、ヒントにスクリプト引数を含め、次に使用するコマンドに関するヒント。

2
bashで単一引用符で囲まれた$ 'string'と二重引用符で囲まれた$“ string”の違いは何ですか?
私はecho次の2つのコマンドを使用して新しい行を実行しようとしました: 最初のコマンド: echo $'Hello World\nThis is a new line' 応答: Hello World This is a new line 2番目のコマンド: echo $"Hello World\nThis is a new line" 応答: Hello World\nThis is a new line 私の質問はで包まれた文字列の違い何さ$' 'で包まれた文字列の対$" "中bashさんはecho?
9 bash  quoting  echo 

4
リダイレクトが失敗した場合、bashプログラムは実行されません
bashでは、リダイレクトを使用するコマンドが失敗すると、それより前に実行されていたプログラムは実行されないことに気づきました。 たとえば、このプログラムはファイル "a"を開き、50バイトをファイル "a"に書き込みます。ただし、権限が不十分なファイル(〜root / log)へのリダイレクトを指定してこのコマンドを実行しても、「a」のファイルサイズは変更されません。 $ ./write_file.py >> ~root/log -bash: /var/root/log: Permission denied cdal at Mac in ~/experimental/unix_write $ ls -lt total 16 -rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES プログラムが実行され、すべての出力がキャプチャされ(ファイル "a"にも書き込まれる)、その後、出力が〜root / logに書き込まれなくなると考えられます。代わりに、プログラムは実行されません。 これはなぜですか、またbashはプログラムを実行する前に実行する「チェック」の順序をどのように選択するのですか?他のチェックも実行されますか? PS私は、「許可が拒否された」ファイルにリダイレクトされたときに、cronで実行されているプログラムが実際に実行されたかどうかを確認しようとしています。

6
dfとmountを使用する場合、物理ディスクのみを表示します
dfまたはを使用する場合mount、最も重要なのは物理ディスクパーティションです。最近では、これらのコマンドの出力は、一時的または仮想的なファイルシステム、cgroup、その他私が定期的に関心のないものに圧倒されています。 出力の物理パーティションは常に「/」で始まるためdf、およびのエイリアスを作成してみましたmount。 alias df1="df | egrep '^/'" alias mount1="mount | egrep '^/'" これは問題mount1なく動作します(ただし、 ' /'は赤で表示されます)。ただしdf1、-hオプションをに追加したい場合があるためdf、実行できませんdf1 -h。使用する可能性のあるすべてのオプションの組み合わせにエイリアスを設定したくない場合。私は本当にbashで関数を定義することを検討する必要がありますか?より良い解決策はありdf1ますか?


3
bashビルトインを使用してサブシェルまたは関数の出力を置き換える方法
私は組み込みのbashサブストリングを使用して、サブシェルまたは別のbash関数の出力を置き換えようとしています。 以下のコマンドはzshで非常にうまく機能します。しかしbad substitution、bashでエラーが発生します。 ${${PWD##*/}//trunk/latest} または ${$(basename $PWD)//trunk/latest} 出力は、最後のフォルダであるべき$PWDで置き換えられ、latest私の現在のディレクトリがあるときtrunk そうなる/home/user/trunkはずlatest 変数やパイプに依存せずに文字列エディションをチェーンできるbash同等のものはありますか?または、bashビルトインでは、入力を文字列またはプレーン変数のみにできますか?
9 bash 

5
複数のファイルで最後に出現する文字列を見つける
文字列の最後の出現を見つけるには、複数のログファイル(過去24時間に生成されたすべてのファイル、すべて同じディレクトリに保存されている)を検索する必要があります。これは私が書いたコマンドです: find . -mtime 1 | grep fileprefix | xargs grep 'search string' | tail -1 しかし、これは1つのファイルの最後の行のみを返します。これを調整してすべての行を取得する方法に関する提案はありますか?

1
バッシュ:ネストされたセッションの深さはいくつですか?
私がbashシェルを開始したとし ます...そして、bashそのシェル内からの別のセッション ...そしてbashそのセッション内からの別のセッション ...そしてbashそのセッション内からの別のセッション ...(回N)など Nセッションをすべて終了するには、exitN回入力する必要があります。 特定のbashセッション内からネストされている深さを確認するにはどうすればよいですか? 理想的には$STY、スクリーンセッションと同様の環境変数を探しています。

4
文字列に改行文字があると断言し、もしあれば、それを削除する方法
私が制御できない何らかの操作の結果である文字列があります。を使用してこの変数を出力するとecho、次のようになります。 echo $myvar hello しかし、私がするとき if [ $myvar = "hello" ]; then echo they are equal else echo they are not equal fi それらが等しくないことは常にわかります。これはnewlineキャラクターのせいだと思います。 文字列も奇妙に動作します。私がする時: newVAR="this is my var twice: "$myvar$myvar echo $newVAR 私は得ます: hellois my var twice: hello これが原因であるかどうかを確認し、原因newlineである場合は削除するにはどうすればよいですか?
9 bash  string 

3
bash変数の改行
私はbash変数に複数の行を格納しようとしていますが、動作しないようです。 たとえば、/bin1行に1つのファイルをリストしてに保存すると$LS、$LSstdinとしてに渡されwc、常に1が返されます。 $ ls -1 /bin | wc -l 134 $ LS=$(ls -1 /bin); wc -l <<< $LS 1 画面に出力しようとすると、さまざまな結果が得られます。echoすべての行を1行にprintf出力し、最初の行のみを出力します。 #!/bin/bash LS=$(ls -1 /bin) echo $LS printf $LS では、bash変数には複数の行を含めることができますか?
9 bash  shell  quoting 

2
配列のループで、配列に要素を追加します
bashのforループに問題があります。例:配列があり("etc" "bin" "var")ます。そして、私はこの配列について繰り返します。しかし、ループでは、配列に値を追加したいと思います。例えば array=("etc" "bin" "var") for i in "${array[@]}" do echo $i done これは表示されますetc bin var(もちろん、別々の行に表示されます)。そして、私doがそのように追加した場合: array=("etc" "bin" "var") for i in "${array[@]}" do array+=("sbin") echo $i done 私は欲しい:(etc bin var sbinもちろん別々の行に)。 これは機能していません。どうすればできますか?
9 bash  array  for 

3
履歴をbashに挿入する
デフォルトでは、bashは行~/.bash_historyを履歴にロードします。ロードするカスタムファイルを追加することはできますか?頻繁に使用するコマンドを含むファイルを挿入し、組み込みの検索を介してそれらにアクセスしたい。
9 bash 

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