タグ付けされた質問 「shell-script」

シェルスクリプト、シェルによって解釈される実行可能ファイル(bash、zshなど)に関する質問。

2
チルダを変数の一部として展開するにはどうすればよいですか?
bashプロンプトを開いて次のように入力すると、 $ set -o xtrace $ x='~/someDirectory' + x='~/someDirectory' $ echo $x + echo '~/someDirectory' ~/someDirectory 上記の5行目が表示されることを期待していました+ echo /home/myUsername/someDirectory。これを行う方法はありますか?私の元のBashスクリプトでは、変数xは実際には次のようなループを介して、入力ファイルのデータから入力されています。 while IFS= read line do params=($line) echo ${params[0]} done <"./someInputFile.txt" それでも、のecho '~/someDirectory'代わりに、同じような結果が得られecho /home/myUsername/someDirectoryます。

8
if条件に基づくケースのフォールスルー
私はbashのケース条件内のif条件に基づいてフォールスルーが発生する方法を探しています。例えば: input="foo" VAR="1" case $input in foo) if [ $VAR = "1" ]; then # perform fallthrough else # do not perform fallthrough fi ;; *) echo "fallthrough worked!" ;; esac 上記のコードで、変数VARが1の場合、ケース条件にフォールスルーを実行させたいと思います。

3
シェルスクリプトでは、(1)バックグラウンドでコマンドを開始する方法(2)x秒待機する方法(3)そのコマンドの実行中に2番目のコマンドを実行する方法を教えてください。
これは私が起こる必要があるものです: バックグラウンドでプロセスAを開始 x秒待つ フォアグラウンドでプロセスBを開始 どうすれば待機を実現できますか? 「スリープ」はすべてを停止するように見えますが、実際にはプロセスAが完全に終了するのを「待機」したくありません。時間ベースのループをいくつか見てきましたが、もっときれいなものがあるかどうか疑問に思っています。

2
関数名で%%はどういう意味ですか?
の出力を見ると、env次の関数もあることがわかりました。 BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } /usr/share/mc/mc-wrapper.shファイルの内容は次のとおりです。 MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE 何をする%%文字は、関数名に意味ですか?特定の場合に呼び出される関数にしますか、それとも他の関数とは異なる方法で呼び出すことができますか? openSUSE 42.3とBashバージョン4.3.42(1)-release(x86_64-suse-linux-gnu)を使用していますが、違いがある場合は、

1
シェルスクリプトのファイル処理の堅牢性をテストするにはどうすればよいですか?
一部の「通常の」ファイル名を処理するシェルスクリプトを作成しましたが、「シェルスクリプトが空白やその他の特殊文字で詰まるのはなぜですか?」を読みました。そしてなぜあなたはLSの出力を解析べきではないと私はそれがより堅牢でかつ有効な任意のファイル名(および/またはディレクトリ名)を処理したいと思います。スクリプトを実行するファイルとディレクトリのテストベッドを作成するにはどうすればよいですか?

2
bashは16進数値0x00を変数に格納できません
私はddでいくつかのトリックをしようとしています。私はそれをddにパイプするために "header"と呼ばれる変数にいくつかの16進値を格納することは可能だと思いました。 変数を使用しない最初のステップは次のとおりです。 $ echo -ne "\x36\xc9\xda\x00\xb4" |dd of=hex $ hd hex 00000000 36 c9 da 00 b4 |6....| 00000005 その後、私はこれを試しました: $ header=$(echo -ne "\x36\xc9\xda\x00\xb4") $ echo -n $header | hd 00000000 36 c9 da b4 |6...| 00000004 ご覧のとおり\x00、$header変数の値が失われました。誰かがこの動作の説明をしていますか?これは私を夢中にさせています。
11 linux  bash  shell-script  dd 


1
シェル変数をファイルの内容に設定するエレガントな方法はありますか?
ファイルにいくつかの構成データがあるとしますconfig。便宜上、このデータをシェル変数にロードしますCONFIG_DATA。 明らかに私はできる: CONFIG_DATA="$(cat config)" しかし、このことはcat私にとっては役に立たないようなものです。これがこれを行う唯一の方法ですか?それとも、よりエレガントな方法がありますか? 回答はPOSIXを優先する必要がありますが、任意のシェルを使用できます。

11
/ bin / sh関数の最後の引数を取得する方法
実装するより良い方法は何print_last_argですか? #!/bin/sh print_last_arg () { eval "echo \${$#}" # this hurts } print_last_arg foo bar baz # baz (もしこれが、私が何をすべきかを知る#!/usr/bin/zsh代わりに、と言う#!/bin/shなら。私の問題は、これをに実装するための合理的な方法を見つけることです#!/bin/sh。) 編集:上記はばかげた例にすぎません。私の目標はしないが、印刷最後の引数をではなく、シェル関数内で最後の引数を参照する方法を持っています。 EDIT2:私はそのような不明確な言葉の質問をお詫び申し上げます。 今回はうまくいきたいです。 これがの/bin/zsh代わりだったら/bin/sh、私はこのようなものを書くことができます #!/bin/zsh print_last_arg () { local last_arg=$argv[$#] echo $last_arg } 式$argv[$#]は、シェル関数内の最後の引数を参照する方法として最初のEDITで説明したものの例です。 したがって、私は本当に次のように私の元の例を書くべきでした: print_last_arg () { local last_arg=$(eval "echo \${$#}") # but this hurts even more echo $last_arg } …


3
変数名で変数を定義する
このスクリプトの何が問題になっていますか?A1 = 1、B1 = 1、C1 = 1を定義しようとしています LIST="A B C" for x in $LIST do "$x"1=1 done 結果は次のとおりです。 ./x.: line 7: A1=1: command not found ./x.: line 7: B1=1: command not found ./x.: line 7: C1=1: command not found


6
別のファイルで見つかった行に応じてファイルから行を削除する
ファイルfile1.txtには、次のような行が含まれています。 /api/purchase/<hash>/index.html 例えば: /api/purchase/12ab09f46/index.html ファイルfile2.csvには、次のような行が含まれています。 <hash>,timestamp,ip_address 例えば: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 file2.csvをフィルタリングして、file1.txtにもハッシュの値が存在するすべての行を削除します。それは言うことです: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv またはこのようなもの。 簡単なはずですが、うまく動かないようです。 誰もがこのタスクのための作業パイプラインを提供できますか?

4
テキストファイルから文字列を分割する高速な方法?
string.txtとlengths.txtの2つのテキストファイルがあります。 String.txt: abcdefghijklmnopqrstuvwxyz lengths.txt 5 4 10 7 ファイルを入手したい >Entry_1 abcde >Entry_2 fghi >Entry_3 jklmnopqrs >Entry_4 tuvwxyz 私は約28,000のエントリで作業しており、それらは200から56,000文字の間で異なります。 現在、私は使用しています: start=1 end=0 i=0 while read read_l do let i=i+1 let end=end+read_l echo -e ">Entry_$i" >>outfile.txt echo "$(cut -c$start-$end String.txt)" >>outfile.txt let start=start+read_l echo $i done <lengths.txt しかし、それは非常に非効率的です。より良いアイデアはありますか?


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