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

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

3
テールコマンドをエコーすると、予期しない出力が生成されますか?
このコマンドを単独で実行すると、期待される結果(crontabの最後の行)が生成されます。 tail -n 1 /etc/crontab ただし、echoコマンドの一部として実行して結果をファイルに送信すると、作業ディレクトリ内のすべてのファイルの概要と予想される結果が追加されます。 sudo bash -c 'echo $(tail -n 1 /etc/crontab) > /path/to/file' なぜこのコマンドは余分なデータを生成したのですか?
8 bash  sudo  cron  echo  tail 

4
ファイルの最初と最後を表示するためのBashメソッド
キューベースのクラスターでは、保留中のジョブのキューは、コマンドなどから表示されますshowqueue。 コマンドは、列など、名前などの適切なデータのリストを返しますが、列/データは質問には関係ありません。 私は時々のwatchようwatch showqueueにユーティリティを使用するのが好きです(エイリアスを使用alias watch="watch "して、コマンドのエイリアス展開を強制的に監視します)。最初の数行に重要なデータ(実行中のジョブ)があり、次に保留中のジョブなどがあり、最後にいくつかの重要な要約があります。 ただし、showqueueの出力が画面から消える場合があります(信じられないほど、私は知っています)。理想的には、ファイルの最初と最後を同時に表示できる方法が欲しいです。 私がこれまでに持っている最高のものは:showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2、そしてwatchそのエイリアスで使用することです。 誰かがもう少し柔軟な、または単一のユーティリティを知っていますか?私の解決策は、「...」の改行を複数行にするためのbashループで少し厄介になっています。ターミナルウィンドウのサイズを変更することはまったく適応されていません。 助言がありますか?

5
Bash配列でのパラメーター置換の使用
Bash配列に読み込む必要があるfile.txtがあります。次に、スペース、二重引用符、およびすべてのエントリの最初のカンマを除くすべてを削除する必要があります。これが私がどこまで得たかです: $ cat file.txt 10,this 2 0 , i s 30,"all" 40,I 50,n,e,e,d,2 60",s e,e" $ cat script.sh #!/bin/bash readarray -t ARRAY<$1 ARRAY=( "${ARRAY[@]// /}" ) ARRAY=( "${ARRAY[@]//\"/}" ) for ELEMENT in "${ARRAY[@]}";do echo "|ELEMENT|$ELEMENT|" done $ ./script.sh file.txt |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| |ELEMENT|50,n,e,e,d,2| |ELEMENT|60,se,e| コンマの状況を除いて、それは素晴らしい働きをします。この猫のスキンを作成する方法は複数あることは承知していますが、これは一部のスクリプトが大きいため、ここに到達するにはパラメーター置換を使用したいと思います。 |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| …

4
ログイン直後に「コマンドが見つかりません」というスクリプトを追跡するにはどうすればよいですか?
ログインすると、次のメッセージが表示されます。 -bash: $'\r' : command not found -bash: $'\r' : command not found -bash: $'\r' : command not found 一部の起動スクリプトのWindowsスタイルの行末が原因であることが明らかであるため、私の質問は、それを引き起こすスクリプトを追跡できますか?

2
bashエイリアスは、shopt expand_aliasesを使用しても展開されません
bash -c構成内でエイリアスを実行したい。 bashマニュアルには書かれています: expand_aliasesシェルオプションが以下を使用して設定されていない限り、シェルがインタラクティブでない場合、エイリアスは展開されません。shopt この例では、明示的hiに設定したときにエイリアスが見つからないのはなぜexpand_aliasesですか? % bash -O expand_aliases -c "alias hi='echo hello'; alias; shopt expand_aliases; hi" alias hi='echo hello' expand_aliases on bash: hi: command not found 私は走っていGNU bash, version 5.0.0(1)-release (x86_64-pc-linux-gnu)ます。 コンテキスト:アイドル優先度でエイリアスを実行できるようにしたいと思います。 #!/bin/bash exec chrt -i 0 nice -n 19 ionice -c 3 bash -c ". ~/.config/bash/aliases; shopt -s …
8 bash  alias 

2
複数のテキストソースの最初の行から配列を作成するにはどうすればよいですか?
それぞれ数行のテキストを持つファイルへのパスの配列があります。次のように処理された各ファイルの最初の行が入力された配列を作成したいと思います。 # this.txt first line is [Test this] # another.txt first line is [Test another] paths=( ./this/path/this.txt ./another/path/another.txt ) for i in ${paths[@]}; do read -r line < $i lines+=$line done せいぜい、配列で取得した値は1つだけです。forループから探している配列を取得できないようです。私は多くのバリエーションを試しましたが、どこが間違っているのかを理解するのに苦労しました。

5
exec '{}'が見つかりません>
Execを使用すると、すべての引数を一度{} +に渡すか、1つずつ渡すことができます。{} \; ここで、すべてのjpegの名前を変更したいとしましょう。問題はありません。 find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \; しかし、出力をリダイレクトする必要がある場合は、リダイレクト'{}'後にアクセスできません。 find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \; これは機能しません。forループを使用して、findの出力を使用する前に変数に格納する必要があります。認めましょう、面倒です。 for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do …
8 bash  find 

2
Bashスクリプトのこの「find」コマンドに混乱しましたか?
私は、意味を説明できなくなった誰かが作成したbashスクリプトを持っています。これは、フォルダーの自動TAR処理とバックアップに使用されます。現時点で私は最後の行で混乱しています: find '/home/_backups/pokebrawl' -mtime +6 -type f -delete 完全なスクリプトは次のとおりです。 #!/bin/bash #Purpose = Backup of Important Data #Created on 17-1-2012 #Author = Hafiz Haider #Version 1.0 #START TIME=$(date +"%m-%d-%Y-%T") FILENAME=pokebrawl-$TIME.tar.gz SRCDIR=/home/servers/brawl/world DESDIR=/home/_backups/pokebrawl tar -cpzf $DESDIR/$FILENAME $SRCDIR find '/home/_backups/pokebrawl' -mtime +6 -type f -delete #END

1
プログラムに渡す引数のシーケンスを生成しますか?
私は現在、中括弧とグロビングの組み合わせを使用して、vlcで複数のファイルを一度に再生しています: vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}* しかし、数字は常に完全なシーケンスです、おそらくそれを少し簡単にするための方法がありますか? vlc K20-{06-17}* ?たぶんseq何となく使う? 使うことができます $ echo K20-{$(seq -s, -f "%02.0f" 06 17)}* K20-{06,07,08,09,10,11,12,13,14,15,16,17}* しかし、それは拡張されていないようです*。それを回避する方法はありますか?
8 bash 

3
シェル:ifでパラメーター付きの関数を使用する
以下のコードを実行しようとしていますが、ifステートメントで関数を使用しようとすると、-bash: [: too many argumentsエラーが発生します。なぜそれが起こっているのですか? 前もって感謝します! notContainsElement () { local e match="$1" shift for e; do [[ "$e" == "$match" ]] && return 1; done return 0 } list=( "pears" "apples" "bananas" "oranges" ) blacklist=( "oranges" "apples" ) docheck=1 for fruit in "${list[@]}" do if [ notContainsElement "$fruit" "${blacklist[@]}" -a …

3
$ RANDOMを使用すると、スクリプトは同じ出力を生成します
コマンドライン自体からn入力するランダムな文字の単語を印刷しようとしていますnが、何らかの理由で、スクリプトでに同じ値を使用すると毎回同じ答えが返されnます。 #!/bin/bash num=$1 egrep "^.{$num}$" /usr/share/dict/words | head -n $RANDOM| tail -n 1 私は私のスクリプトを次のように呼んでいます: $ bash var3.sh 5 étude # always the same output when using 5 $ bash var3.sh 3 zoo # always the same output when using 3 どこvar3.sh私のスクリプトの名前で、5は私がランダムに印刷したい単語の長さです。 どうすれば本当にランダムな単語を印刷できますか?
8 bash  random 

5
$ find -exec cd =>エラー:=> find: 'cd':そのようなファイルまたはディレクトリはありません
このコマンドを実行すると、機能します。 $ find . -inum 888696 -exec ls '{}' \; Conversation.pst Outlook Data File Outlook Data File.sbd Trash Unsent Messages Inbox.pst Outlook Data File.msf Sent.pst Trash.msf Unsent Messages.msf ただし、それを置き換えるlsと機能cdしません: $ find . -inum 888696 -exec cd '{}' \; find: ‘cd’: No such file or directory 私cdはbash組み込みであることを知っているので、これも機能しない次のことを試しました: $ find . -inum …
8 bash  find  cd-command 

1
$ @のパラメーター展開はshシェルでサポートされていませんか?
私はAUに関する質問への回答を投稿しました$@が、shシェルでのパラメーター展開が機能しないことがわかりました。 <infile xargs -d'\n' sh -c 'echo "${@%%/*}"' _ しかし、それはで正常に動作しbashます。これはshシェルの予想される動作ですか、そこでシェルを拡張するにはどうすればよいですか? さらに、-n1オプションでxargs一度にコマンドに渡すことができるのは1行だけであることはわかっていますが、sh展開できるかどうかに興味がありました$@。 <infile xargs -d'\n' -n1 sh -c 'echo "${0%%/*}"' infile 含む: A1 /B1/C1 A 2/B2/C2 A3/B3/C3
8 bash  shell  dash 

2
dmesgで何かが見つかった場合にプロセスを強制終了する無限ループを作成するにはどうすればよいですか?
一部またはすべての値を返すwhile場合dmesgは、決定されたプロセスを強制終了するループを作成する必要があります。 これが私が持っているものです。 #!/bin/bash while [ 1 ]; do BUG=$(dmesg | grep "BUG: workqueue lockup" &> /dev/null) if [ ! -z "$BUG" ]; then killall someprocessname else break fi done 代わりに! -zやるべきかわからない[ test -n "$BUG" ] -nを使用すると、バイナリを期待することについて何かが示されます。 BUGのロックアップがすべてのプロセスを停止するため、スクリプトが機能するかどうかはわかりませんがdmesg、コンピューターが完全に停止するまでにはまだ数行あります。おそらく、追いつき、プロセスを強制終了できます。
8 linux  bash  scripting 

1
Bash:ファイルにリダイレクトし、常に新規に作成します
bashでは、コマンドリンク echo test > actual.txt 呼び出されたファイルの内容actual.txtを「test」で置き換え、ファイルが存在しない場合は作成します。ただし、ファイルが存在する場合、bashはそれを開き、切り捨てて、新しい内容をファイルに書き込みます。 具体的には、リダイレクトコマンドはこのシナリオで失敗します。 ln -s /some/illegal/path link.txt echo test > link.txt Bash 4.4.12を使用すると、紛らわしいエラーメッセージが表示されますlink.txt: No such file or directory。 これを回避する1つの方法は、リダイレクトされたコマンドを実行する前に、必ずファイルを削除することです。 rm link.txt && echo test > link.txt しかし、この失敗モードを防ぐbashオプションまたはリダイレクト演算子の微調整があるかどうか疑問に思っていました。何か案は?

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