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

Bashコマンドシェル用に記述されたスクリプトに関する質問。エラー/構文エラーのあるシェルスクリプトについては、ここに投稿する前に、shellcheckプログラム(またはhttps://shellcheck.netのWeb shellcheckサーバー)で確認してください。Bashのインタラクティブな使用に関する質問は、スタックオーバーフローよりもスーパーユーザーで話題になる可能性が高くなります。

3
複数のbashスクリプトにまたがってpushd / popdスタックを表示しない(静かなpushd / popd)
pushdまたはpopdを使用するたびに、スタックを標準出力に出力します。どうしてそうしないのですか? pushd > /dev/nullお互いを呼び出すスクリプトがたくさんあるので、毎回やりたくありません。 たぶんいいオーバーライドでそれができるかもしれませんが、私はこれらのビルトインを自分のスクリプトでのみオーバーライドして、正しい動作を復元する必要があります。
92 bash  output  built-in 

9
EmacsシェルモードでのBashオートコンプリート
GNOMEターミナルでは、Bashはスマートな自動補完を行います。例えば apt-get in<TAB> なる apt-get install Emacsシェルモードでは、明示的にソースを指定した後でも、このオートコンプリートは機能しません/etc/bash_completion。上記の例inでは、有効なapt-getコマンドオプションではなく、現在のディレクトリのファイル名をそのまま使用するか、オートコンプリートします。おそらく、これはEmacsがTabキーの押下をインターセプトしているためです。でスマートオートコンプリートを有効にするにはどうすればよいshell-modeですか?

5
印刷せずにBashセット+ x
set +x印刷せずにbashで言うことができるかどうか誰かが知っていますか: set -x command set +x 痕跡 + command + set +x しかし、それは単に印刷する必要があります + command Bashはバージョン4.1.10(4)です。これはしばらくの間私を悩ませています-出力が無駄なset +x行で乱雑になり、トレース機能がそれ程有用ではなくなります。
92 bash  shell 




9
現在のシェル内でコマンドの出力を実行するにはどうすればよいですか?
私は、ファイルからコンテンツを取得して現在のシェル内で実行するsource(aka .)ユーティリティをよく知っています。 今、私はいくつかのテキストをシェルコマンドに変換し、次のようにそれらを実行しています: $ ls | sed ... | sh ls単なるランダムな例であり、元のテキストは何でもかまいません。sedまた、テキストを変換するための単なる例です。興味深いビットはshです。到達したものは何でもパイプshして実行します。 私の問題は、それは新しいサブシェルを開始することを意味します。現在のシェル内でコマンドを実行したいのですが。私がsource some-fileテキストファイルにコマンドを持っていれば、私ができるように。 汚れているので一時ファイルを作成したくありません。 または、現在のシェルとまったく同じ特性でサブシェルを開始したいと思います。 更新 わかりました。バッククォートを使用したソリューションは確かに機能しますが、出力を確認および変更しているときにこれを行う必要があることが多いので、最終的に結果を何かにパイプする方法があればもっといいと思います。 悲しいアップデート ああ、/dev/stdin物事はとてもきれいに見えましたが、もっと複雑なケースでは、うまくいきませんでした。 だから、私はこれを持っています: find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin これにより、すべての.docファイルの拡張子が小文字になります。 ちなみに、これはで処理できますがxargs、それだけではありません。 find . -type f -iname '*.doc' | …
92 bash  shell  unix  pipe 

18
特定の時間/日付まで寝る
bashスクリプトを特定の時間までスリープさせたい。だから、私は「sleep」のような、間隔をとらずに終了時間を取り、それまでスリープするコマンドが必要です。 「at」デーモンは解決策ではありません。特定の日時まで実行中のスクリプトをブロックする必要があるためです。 そのようなコマンドはありますか?
92 bash  sleep  wait 

5
2つのフォルダを自動的に同期させる方法は?
1つのフォルダとそのすべてのサブツリーの同期コピーが欲しいのですが。 このように自動的に機能するはずです。元のフォルダーからコンテンツを作成、変更、または削除するたびに、それらの変更が同期フォルダーに自動的に適用されるはずです。 このタスクへの最良のアプローチはどれですか? ところで:私はUbuntu12.04を使用しています 最終的な目標は、シンボリックリンクやマウントを使用せずに、個別のリアルタイムバックアップコピーを作成することです。Ubuntu Oneを使用してコンピューター間でデータを同期しましたが、しばらくすると問題が発生し、同期中にすべてのデータが失われました。 そこで、データのバックアップコピーを保持するために、さらにステップを追加することを考えました。 データは「フォルダA」に保存しています 「フォルダA」から「フォルダB」への一方向の同期を作成するには、現在の質問に対する回答が必要です(?をcron含むスクリプトはrsync可能性がありますか?)。AからBへの一方向のみである必要があります。Bへの変更をAに適用してはなりません。 私は単に「フォルダーB」を UbuntuOneと同期し続けます。このようにして、Aの変更はすべてBにアップルされ、U1から検出され、クラウドに同期されます。何か問題が発生し、U1がBのデータを削除した場合、私は常にAのデータを保持しています。 lanzzのコメントに触発されて、別のアイデアは、起動時にrsyncを実行してUbuntu Oneの下のフォルダーのコンテンツをバックアップし、rsyncが完了した後にのみUbuntuOneを起動することです。 あれについてどう思う?rsyncがいつ終了するかを知る方法は?

12
空のディレクトリを見つけるUNIX
与えられたディレクトリのリストに対して空のディレクトリを見つける必要があります。一部のディレクトリには、その中にディレクトリがあります。 内部ディレクトリも空の場合、メインディレクトリは空であると言えます。それ以外の場合は空ではありません。 これをどのようにテストできますか? 例えば: A>A1(file1),A2 this is not empty beacuse of file1 B>B1(no file) this is empty C>C1,C2 this is empty
91 bash  unix  directory 

5
PythonでBashの「ソース」をエミュレートする
次のようなスクリプトがあります。 export foo=/tmp/foo export bar=/tmp/bar ビルドするたびに、 'source init_env'(ここでinit_envは上記のスクリプトです)を実行して、いくつかの変数を設定します。 Pythonで同じことを行うために、このコードを実行しました。 reg = re.compile('export (?P<name>\w+)(\=(?P<value>.+))*') for line in open(file): m = reg.match(line) if m: name = m.group('name') value = '' if m.group('value'): value = m.group('value') os.putenv(name, value) しかし、誰かが次のような行をinit_envファイルに追加すると便利だと判断しました。 export PATH="/foo/bar:/bar/foo:$PATH" 明らかに私のPythonスクリプトはバラバラになりました。この行を処理するようにPythonスクリプトを変更することもできますが、後で誰かがinit_envファイルで使用する新しい機能を思いついたときに中断します。 問題は、Bashコマンドを実行してそれを変更する簡単な方法があるos.environかどうかです。
91 python  bash 

5
Bashで引用符付き文字列内の環境変数を使用する方法
私はbashスクリプトで以下のさまざまな形式を試しました: #!/bin/bash svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS" しかし、COLUMNS環境変数を正しく展開するための構文を取得できません。 私は以下のさまざまな形を試しました: svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS' そして svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}' そして eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W …

5
Bashのバックティックを適切にネストする方法
一部のバックラッシュを見逃したか、バックラッシュがプログラマー引用符のループが多すぎても機能しないようです。 $ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``" hello1-hello2-hello3-echo hello4 欲しかった hello1-hello2-hello3-hello4-hello5-hello6-...
91 bash  shell  unix  quoting 


2
bashで空白を(アンダースコア)_で置き換える最も簡単な方法[終了]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 10年前に閉鎖。 最近、XenServerでVMを解析する小さなスクリプトを作成する必要がありました。VMの名前はWindows XPやWindows Server 2008などでほとんどが空白であるので、それらの空白を削除してアンダースコア_に置き換える必要がありました。文字列操作に関しては、sedを使用してこれを行う簡単な解決策が見つかりました。 echo "This is just a test" | sed -e 's/ /_/g' 戻り値 This_is_just_a_test これを達成する他の方法はありますか?
91 bash  sed 

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