5 bashで最後に失敗したコマンド $?変数は、最後に実行されたコマンドの終了ステータスを保持しています。最後に実行されたコマンド自体を保持する変数はありますか? 9 bash shell scripting environment-variables
4 配列内のすべての要素を間接的に返す Bashのマニュアルページで${!a}は、名前の内容a(間接参照のレベル)である変数の内容を返すためのの使用について説明しています。 これを使用して配列内のすべての要素を返す方法を知りたい、つまり、 a=(one two three) echo ${a[*]} 戻り値 one two three 私がしたい: b=a echo ${!b[*]} 同じを返すために。残念ながら、そうではありませんが、0代わりに戻ります。 更新 返答を考えると、私の例はもちろん次のようなものなので、単純すぎることに気づきました。 b=("${a[@]}") 私が必要と言ったことを正確に達成します。 だから、これが私がやろうとしていたことです: LIST_lys=(lys1 lys2) LIST_diaspar=(diaspar1 diaspar2) whichone=$1 # 'lys' or 'diaspar' _LIST=LIST_$whichone LIST=${!_LIST[*]} もちろん、Bashのmanページを注意深く読むと、最後の行が単に$_LIST(配列ではなく)「配列」のインデックスを返すため、これは期待どおりに機能しないことがわかります。 いずれにせよ、(指摘されたように)次の作業を行う必要があります。 LIST=($(eval echo \${$_LIST[*]})) または...(最終的に私が行ったルート): LIST_lys="lys1 lys2" ... LIST=(${!_LIST}) もちろん、その要素に空白が含まれていないと仮定します。 9 bash array
1 compgen:大文字と小文字を区別しない 私は、カスタム実装しようとしているbashの補完をとして、ここで説明します。しかし、そのようでcompgenある大文字と小文字を区別。そのコンテキストで大文字と小文字を区別しないようにする方法はありますか? 9 bash autocomplete
2 シェル(bashなど)はワイルドカードパターンをどのように展開しますか? ディレクトリに、文字「a」で始まる100個のファイルがあると仮定します。 grep <some string> a*端末から行う場合、シェルはこれをどのように処理しますか? それは正規表現を拡張し、aで始まるすべてのファイルのリストを取得し、それらのファイルのそれぞれで順次grepを取得しますか?それとも他の方法がありますか? 上記のファイル名の配列が「a」で始まると仮定します。forループを記述し、シェルスクリプトまたはacプログラムで自分で反復を実行すると、時間がかかりますか? 9 bash shell wildcards
1 UTF-8文字を表示するようにbashコンソールのフォントを変更する方法 bashでUTF-8文字を正しく表示するのに問題があります。名前にアクセント付き文字が含まれているzipファイルを抽出しようとしたところ、無効なマルチバイト文字エラーが発生していました。私.bash_profileはこれで作成しました: export LANG=en_US.UTF-8 export LOCALE=UTF-8 これは抽出の問題を解決しました。しかし、コンソールはまだアクセント付き文字を正しく表示しません。Konquerorはアクセント付き文字に問題はありません。私は何をしなければなりませんか? 9 bash unicode
2 シェルスクリプトのデバッグ:実行せずに構文チェック [bash]シェルスクリプトの構文をチェックしてその構文をチェックするだけで、実際には何も実行せず、潜在的な損傷を引き起こさないようにできるオプションはありますか? 9 bash shell-script testing
1 一時ファイルによるbashプロセスの置換 たとえば、一部のプログラムでは、ファイルをシーク可能にする必要がありますobjdump。 $ objdump -D -b binary -m i8086 <(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p) objdump: Warning: '/proc/self/fd/11' is not an ordinary file プロセス置換で一時ファイルを使用すると便利です。 manページで、bashがプロセス置換を使用して一時ファイルにフォールバックできることを確認できますが、一時ファイルを使用するように明示的に要求できますか? 同様zshの=()。 $ objdump -D -b binary -m i8086 =(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p) /tmp/zsh1u1Nrw: file format binary Disassembly of section .data: … 8 bash shell tmp process-substitution
2 Bash:バックグラウンドでの複数のforループ これは、複数の順次処理をバックグラウンドで開始する正しい方法ですか? for i in {1..10}; do for j in {1..10}; do run_command $i $j; done & done; すべてがj与えられたため、互いの後に処理されなければならないiが、すべてをi同時に処理する必要があります。 8 bash background-process for parallelism
1 $できます!並列実行されているスクリプトで使用すると競合状態が発生しますか? 次のようなコードで、並行して実行される複数のbashスクリプトがあるとします。 #!/bin/bash tail -f /dev/null & echo "pid is "$! そのスクリプトの$!最新のバックグラウンドタスクのPIDを取得することが保証されていますか、それともグローバルな最新のバックグラウンドタスクですか?この機能に依存すると、PIDが別のスクリプトで開始されたプロセスからのPIDである場合に競合状態が発生する可能性があるかどうか、私は興味があります。 8 bash shell-script parallelism
7 引用符付きのbash awkコマンド 私はしばらくの間、この質問に対する答えを見つけようと努めてきました。awkからの出力に基づいてコマンドを実行する簡単なスクリプトを書いています。 ID_minimum=1000 for f in /etc/passwd; do awk -F: -vID=$ID_minimum '$3>=1000 && $1!="nfsnobody" { print "xfs_quota -x -c 'limit bsoft=5g bhard=6g $1' /home "}' $f; done 問題は、-c引数が単一引用符で囲まれたコマンドを取り、それを適切にエスケープする方法を理解できず$1、ユーザー名に展開されないことです。 基本的に私はそれを出力させようとしているだけです: xfs_quota -x -c 'limit bsoft=5g bhard=6g userone' /home xfs_quota -x -c 'limit bsoft=5g bhard=6g usertwo' /home 等... 8 bash shell scripting
2 データの場合のみファイルを上書き コマンド出力でファイルを上書きしようとしていますが、出力がある場合のみです。つまり、私はたいてい mycommand > myfile しかし、これがmyfile空のデータで上書きされる場合は、古いバージョンのを保持したいと思いmyfileます。私は何かをifne使うことが可能であるべきだと思いました、ラ mycommand | ifne (cat > myfile) しかし、それはうまくいきません... 間接的なアプローチ mycommand | tee mytempfile | ifne mv mytempfile myfile 動作しますが、その一時ファイルの使用は不適切だと考えています。 Q:最初のアイデアが機能しないのはなぜですか?仕事にできますか?または、私の元の問題に対して別の素晴らしい、おそらく完全に異なる解決策がありますか? 8 bash
3 フォルダーのファイルの17行目(またはそれ以下の場合は最後)を監視するにはどうすればよいですか? 私は現在使用しています watch head -n 17 * 動作しますが、17日までのすべての行も表示されます。基本的に、現在のアプローチで表示される各ファイルの最後の行のみを表示します。どうすればそれを達成できますか? 例 例として、行nrを減らします。7.に。 ファイルの例: 1 2 3 4 5 6 7 8 この行: watch head -n 7 * 出力 1 2 3 4 5 6 7 私が欲しいところ: 7 8 bash head watch
5 bashスクリプトのパイプを含む完全なコマンドラインにアクセスすることは可能ですか? 例えばコマンドライン: test.sh arg1 | grep "xyz" bashスクリプトtest.shに次のgrepを含む完全なコマンドラインを取得することは可能ですか? 8 bash
5 $()のコマンドによって出力された{1,2}が補間されないのはなぜですか? 2つのテキストファイルがあるディレクトリにいます。 $ touch test1.txt $ touch test2.txt いくつかのパターンを使用して(Bashで)ファイルを一覧表示しようとすると、機能します。 $ ls test?.txt test1.txt test2.txt $ ls test{1,2}.txt test1.txt test2.txt ただし、パターンがで囲まれたコマンドによって生成される場合、パターンの$()1つだけが機能します。 $ ls $(echo 'test?.txt') test1.txt test2.txt $ ls $(echo 'test{1,2}.txt') ls: cannot access test{1,2}.txt: No such file or directory 何が起きてる?なぜパターン{1,2}が機能しないのですか? 8 bash bash-expansion
4 Bash読み取り:カンマ区切りリストの読み取り、最後の要素が欠落しています 以下のコマンドの出力は私には奇妙です。なぜ要素5が返されないのですか? $ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done 0 1 2 3 4 「5」も返されると思います。実行していGNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)ます。コンマの追加は機能しますが、入力データにコンマがありません。何か不足していますか? 8 bash shell-script read shell-builtin