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

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

3
環境変数に基づく条件付き割り当て
bashスクリプトでは、値が外部のグローバル環境変数($MYAPP_ENV)に依存するように、ローカル変数を割り当てています。 if [ "$MYAPP_ENV" == "PROD" ] then SERVER_LOGIN=foobar123@prod.example.com else SERVER_LOGIN=foobar987@test.example.com fi 上記の割り当てを書くためのより短い(まだクリーンな)方法はありますか?(おそらく何らかの条件演算子/インラインを使用している場合)

3
ファイルを置き換えるときにファイルのアクセス許可を維持(または復元)する
ファイルを引数として受け入れ、ファイルを変更してから、2番目の引数で指定されたファイル名に書き込むコマンドがあります。私はそのプログラムを呼びますmodifyfile。 「そのまま」動作するようにしたいので、一時ファイルに変更してから元に戻すシェルスクリプト(bash)を作成しました。 TMP=`mktemp` modifyfile "$original" "$TMP" mv -v "$TMP" "$original" これには、このファイルの権限を破壊するという不幸な副作用があります。ファイルはデフォルトの権限で再作成されます。 mv権限を変更せずに宛先を上書きするようにコマンドに指示する方法はありますか?または、元のユーザー、グループ、および権限を保存して復元する方法はありますか?

1
bashターミナルで新しい行を入力/開始する方法は?
サンプルのbash forループのサンプルが複数の行に分散している例に気づきました for VARIABLE in file1 file2 file3 do command1 on $VARIABLE command2 commandN done (例: http: //www.cyberciti.biz/faq/bash-for-loop/)bashターミナルに改行を入力するにはどうすればよいですか(パテを使用しています)。行の最後でEnterキーを押すと、システムによって実行されます。
11 bash  line-editor 

5
ユーザーのデスクトップが読み込まれたときにスクリプトから検出する方法は?
私は、bashで実装されcron、@rebootオプションを使用して実行されている、デスクトップが非アクティブであることを示すデーモンを持っています。スクリプトは次のとおりです(タイミングはテスト目的で短くなっています)。 #!/bin/bash P_STATE=0 while : do sleep 5 if [ $P_STATE == 0 ]; then [ `xprintidle` -ge 25000 ] && P_STATE=1 && wmctrl -k on else [ `xprintidle` -le 25000 ] && P_STATE=0 done 問題:ユーザーがまだログイン画面xprintidleなどにいwmctrlて、デスクトップがまだロードされていないために失敗した場合。これを回避するために、スクリプトの最初に次の行を追加しました。 while: do sleep 10s [ -n `who | grep "$USER"` ] && break done …

3
bash:個々の行を `-x`エコーからエスケープします
-xオプションで実行しているbashで、個々のコマンドのエコーを免除することはできますか? 私は出力をできるだけきれいにしようとしているので、のサブシェルでスクリプトの特定の部分を実行していset +xます。ただし、行set +x自体は引き続きエコーされ、出力に重要な情報は追加されません。 昔のことを覚えています。で.bat実行するとecho on、個々の行はで開始することで除外できました@。bashに相当するものはありますか? #!/bin/bash -x function i_know_what_this_does() { ( set +x echo do stuff ) } echo the next-next line still echoes 'set +x', is that avoidable? i_know_what_this_does echo and we are back and echoing is back on 上記を実行すると、出力は次のようになります。 + echo the next-next line still echoes 'set …
11 bash  shell  debugging 

3
実行中のプロセスの出力リダイレクトを変更するにはどうすればよいですか?
私は出力をリダイレクトする方法とbashでそれらを抑制する方法を知っています。今、私は誤って(例えば、コマンドへの出力のリダイレクト部分を追加するのを忘れたと仮定2>&1または> /tmp/mystdout)、私のバックグラウンド・プロセスがすでにしばらく実行されて、私はまだどこに変更することができますstdoutし、stderrに書き込まれていますか?アプリケーションを強制終了して再起動したくないのですが。 Gillesのコメントで尋ねられたように、より具体的に説明するために、以下のシナリオで具体的に説明します。 間違った出力ファイル リダイレクトstderrするのを忘れたstdout または両方の組み合わせ たとえば、Apacheを実行していて、ファイル記述子を確認できます。 /proc/8019/fd/0 -> /dev/null /proc/8019/fd/1 -> /dev/null /proc/8019/fd/2 -> /var/log/apache2/error.log

3
終了ステータスに基づいてcronメールをMAILTOに出力します
次のようなphpコマンドを実行するcronジョブがあります。 php /path/to/script.php > dev/null これにより、MAILTOアドレスにSTDERR出力のみが送信されます。私が収集したものから、PHPスクリプトは、終了ステータスが1であってもSTDERR情報を出力していません。 phpコマンド(STDOUT)の出力を取得して、終了ステータスがゼロ以外の場合にのみMAILTOに送信するにはどうすればよいですか?
11 bash  cron 

5
statを使用してタッチのタイムスタンプを提供する
一部のドキュメントをその場でOCRしようとしています(Windows共有のLinuxコマンドラインから)。OCRのプロセスはfindであり、findコマンドを使用してファイルをループで正しくパイプ処理することで混乱しています。 ただし、変更のために元のタイムスタンプを保持する必要があります。私は現在、以下のようにstatとtouchを使用しようとしています: #!/bin/bash OLDIFS=$IFS IFS=$(echo -en "\n\b") for f in `find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"` do ORIGTS=`stat -c "%Y" $f` sudo /opt/ABBYYOCR9/abbyyocr9 -rl English -pi -if $f -f PDFA -paemImageOnText -pafpr original -of $f touch -t $ORIGTS $f done IFS=$OLDIFS もちろんタッチコマンドは失敗します。コマンドを個別に実行すると、 "stat -c"が次のようになります。 1334758696 それは私が知らない日付のようなものです。近くにいるような気がしますが、日付をタッチフレンドリーなバージョンに変換する方法がわかりません。何かからの秒の形ですか?
11 bash  scripting  stat 

1
長い入力文字列のbash(ttyおよびX)でホームキーが正しく動作しない
Home現在の入力が十分に短い(たとえば、36文字未満)場合、ヒットすると正常に動作します。ただし、長いコマンドを入力して最初に戻りたい場合、そのコマンドは機能しているように見えますが、コマンドが正しく表示されません。私は最初ではないようですが、約10文字オフです。「ブラインド」と入力しても問題なく動作しますが、まるで入力全体が右にシフトされているように見えますが、再描画はされません。だから私はそれを上書きしますが、「実際には」ではありません。「消去」している場所は「実際には」10文字右にあるためです。したがって、コマンドを消去しようとすると、最初の10文字が表示されますが、ヒットEnterすると、前の入力が空であるかのように別のプロンプトが表示されます。 私はそれがこれまでで最高の説明ではないことを知っていますが、要点はbashがそれを認識して正しいことを行おうとするが、しばしば失敗するということです。 Xセッションのttyと端末の両方でこれを再現します。私はヒットするとCtrl+ V、その後、Home私は(異なる配列を参照して^[OH、Xに^[[1~TTYに)が、両方は私の中にあるように見えます/etc/inputrc。 # do not bell on tab-completion #set bell-style none set meta-flag on set input-meta on set convert-meta off set output-meta on $if mode=emacs # for linux console and RH/Debian xterm "\e[1~": beginning-of-line "\e[4~": end-of-line "\e[5~": beginning-of-history "\e[6~": end-of-history "\e[7~": beginning-of-line "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word …

4
Bashパス補完はsudoでどのように機能しますか?
タブパスの補完が機能しない(少なくともUbuntuおよびAFAIK Archでは) sudo mount <whatever> マウントしようとしているISOファイルがにありません/etc/fstab。入力するだけで mount <whatever> 補完が機能します(ただし、ルートではないため、コマンドは失敗します)。どうやらそれsudoを壊すのです。 sudoで補完を機能させるにはどうすればよいですか? それは驚くべきことです sudo umount <whatever> 完成作品。それはどのように達成されますか?調べます/etc/fstabか? 解決策:渡された引数を使用して、/usr/local/binその呼び出しにシェルスクリプトを挿入しますsudo mount ...。sudo邪魔はないので、このスクリプトを呼び出すと補完が機能します。



2
bashとX11の間でクリップボードを共有する
ではこのスレッド X11でクリップボードに、以前にgnome-terminalの上をマウスで選択されたテキストをコピーする方法のトップの答えを示しています。 私の質問は、bashのセットマークを使用してターミナルからテキストの一部をコピーし、キーボードショートカット(つまりset-mark+ M-w)をコピーするとします。このクリップボードをX11と共有することはできますか? 編集:元の質問では、クリップボードをGNOMEと共有することについて話しましたが、Gillesが以下で指摘するように、GNOMEには特にクリップボードがないため(Xに一般的です)、質問を更新しました。
11 bash  x11  clipboard 

2
.inputrc TABが期待どおりに動作しない
今日は順調です。別の質問です。 これらをに入れる.inputrcと、どちらも同じように動作しますか? TAB: menu-complete Shift-TAB: menu-complete-reverse つまり、どちらも最後の1つが言うことを何でもします。
11 bash  readline 

5
Bashパラメータ配列$ @のインデックス作成と変更
でインデックスを参照することは可能$@ですか?私は、GrayCatのwikiのどこにも次のように使用する参照を見つけることができません。代わりに、「高度なスクリプトガイド」などが、これを変更する前に別の変数に割り当てます。 $ echo ${@[0]} -bash: ${@[0]}: bad substitution 目標はDRYです。最初の引数は1つのことに使用され、残りは別の引数に使用されます。正規化するコード、$@配列、またはこのための個別の関数の重複を避けたいです(ただし、これはおそらくこれが最も簡単な方法です。 明確化:コードをデバッグしやすくするために、可変長 の値を変更することが目的でした。現在のバージョンは私の好みでは少しハックですが、次のような奇妙なパスでも機能します$@ $'--$`\! *@ \a\b\e\E\f\r\t\v\\\"\' \n' 更新:これは不可能のようです。コードはコードとデータの両方の複製を使用しますが、少なくとも機能します。 path_common() { # Get the deepest common path. local common_path="$(echo -n "${1:-}x" | tr -s '/')" common_path="${common_path%x}" shift # $1 is obviously part of $1 local path while [ -n "${1+defined}" ] do path="$(echo …
11 bash  parameter 

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