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

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

6
ファイルシステムがスクリプトでマウントされているかどうかを確認する方法
私はスクリプトを書くのは初めてです...私は非常に基本的なことをすることができますが、今は手が必要です。 バックアップが必要なときにのみマウントされるローカルファイルシステムがあります。 私はこれから始めています。 #!/bin/bash export MOUNT=/myfilesystem if grep -qs $MOUNT /proc/mounts; then echo "It's mounted." else echo "It's not mounted."; then mount $MOUNT; fi 私が言ったように、私はスクリプト作成は非常に基本的です。mountリターンコードを見ることで、コマンドのステータスを確認できると聞きました。 RETURN CODES mount has the following return codes (the bits can be ORed): 0 success 1 incorrect invocation or permissions 2 system error (out of …

3
コマンドオプションにシェル変数を使用する
Bashスクリプトでは、使用するオプションをrsync別の変数に保存しようとしています。これは単純なオプション(など--recursive)に対しては正常に機能しますが、次の問題に直面してい--exclude='.*'ます: $ find source source source/.bar source/foo $ rsync -rnv --exclude='.*' source/ dest sending incremental file list foo sent 57 bytes received 19 bytes 152.00 bytes/sec total size is 0 speedup is 0.00 (DRY RUN) $ RSYNC_OPTIONS="-rnv --exclude='.*'" $ rsync $RSYNC_OPTIONS source/ dest sending incremental file list .bar foo sent …
19 bash  variable 

3
bashスクリプトで新しい空のファイルを作成するにはどうすればよいですか?
出力フラグの出力ファイルが必要になるように書かれたサードパーティのPerlスクリプトを実行しています-o。 残念ながら、スクリプトには実際のファイルが必要なようです。つまり、ユーザーはfilename.txt0バイトの空のファイルを作成してから、スクリプトコマンドラインでこの空のファイルを入力する必要があります。 perl script1.pl -o filename.txt 質問:bashスクリプト内で空のファイルを作成するにはどうすればよいですか?単純に試みるperl script1.pl -o filename.txtと、スクリプトはファイルが存在しないというエラーを出します。

2
`disown -h`と` nohup`は同じように機能しますか?
disown シェルが終了したときに、シェルが非所有のジョブにSIGHUPを送信しないようにします。 否認されたジョブをシェルのジョブ制御から削除します。 最初は2番目の結果ですか?言い換えると、シェルから開始されたプロセスが何らかの方法でシェルのジョブ制御から削除された場合、シェルは終了時にSIGHUPをプロセスに送信しませんか? disown -h シェルのジョブ制御下でプロセスを維持します。これdisown -hは、プロセスがシェルから送信されたSIGHUPを引き続き受信するが、プロセスによるSIGHUPのアクションを「無視」するように設定するということですか?それはに似ていnohupます。 $ sleep 123 & disown -h [1] 26103 $ jobs [1]+ Running sleep 123 & $ fg 1 sleep 123 $ ^Z [1]+ Stopped sleep 125 $ bg 1 [1]+ sleep 123 & $ exit $ ps aux | grep sleep t …
18 bash  nohup  disown 


1
bashは、「IFS」変数の値に応じて動作を変更します
IFS変数をスペースに設定すると、bash複数のスペースを1つのスペースとして扱います(myprogram受け取ったコマンドライン引数を出力するプログラムです)。 IFS=" " x="hello hi world" ./myprogram $x argv[1] = hello argv[2] = hi argv[3] = world しかし、IFS変数をコンマに設定すると、bash複数のコンマが1つのコンマとして扱われません。 IFS="," x="hello,,,hi,,,world" ./myprogram $x argv[1] = hello argv[2] = argv[3] = argv[4] = hi argv[5] = argv[6] = argv[7] = world 何故ですか?
18 bash  shell 

2
`echo $((0x63))`を理解する
コマンドラインで16進数に変換する方法を探していて、非常に簡単な方法があることがわかりましたecho $((0x63))。 それはうまく機能していますが、ここで何が起こっているのか少し混乱しています。 私$(...)は通常、内容が外部コマンドの前に評価されるサブシェルであることを知っています。 この状況ではまだサブシェルですか?私は、サブシェルが(0x63)コマンドではないものを評価しているだけではないことを考えています。 誰かが私のためにコマンドを分解できますか?
18 bash 

2
このスクリプトが端末では機能するのにファイルでは機能しないのはなぜですか?
このシェルスクリプトをファイルに保存しました。基本的な文字列の置換を行います。 #!/bin/sh html_file=$1 echo "html_file = $html_file" substr=.pdf pdf_file="${html_file/.html/.pdf}" echo "pdf_file = $pdf_file" コマンドラインに貼り付けると、正常に機能します。 $ html_file="/home/max/for_pauld/test_no_base64.html" echo "html_file = $html_file" substr=.pdf pdf_file="${html_file/.html/.pdf}" echo "pdf_file = $pdf_file" 与える html_file = /home/max/for_pauld/test_no_base64.html pdf_file = /home/max/for_pauld/test_no_base64.pdf これが上記のechoの出力です-意図したとおりに機能しています。 しかし、スクリプトを呼び出すと、 $ saucer "/home/max/for_pauld/test_no_base64.html" 私はこの出力を取得します: html_file = /home/max/for_pauld/test_no_base64.html /home/max/bin/saucer: 5: /home/max/bin/saucer: Bad substitution 私のスクリプトは別のバージョンのbashなどを使用していますか?シバンのラインを変更する必要がありますか?
18 bash  string 

3
引用符で囲まれた変数のオプションが失敗するのはなぜですか?
私は、bfooで変数を引用する必要があることを読みました。たとえば、$ fooではなく「$ foo」です。しかし、スクリプトを書いているときに、引用符なしでは機能するが、引用符なしでは機能しないケースを見つけました。 wget_options='--mirror --no-host-directories' local_root="$1" # ./testdir recieved from command line remote_root="$2" # ftp://XXX recieved from command line relative_path="$3" # /XXX received from command line これは動作します: wget $wget_options --directory_prefix="$local_root" "$remote_root$relative_path" これはしません($ wget_optionsの前後の二重引用符に注意してください): wget "$wget_options" --directory_prefix="$local_root" "$remote_root$relative_path" この理由は何ですか? 最初の行は良いバージョンです。または、この動作の原因となる隠しエラーがあると疑うべきですか? 一般に、bashとその引用がどのように機能するかを理解するための優れたドキュメントはどこにありますか?このスクリプトを書いている間、私はルールを理解するのではなく、試行錯誤のベースに取り組み始めたと感じています。

3
PS1 = '$(pwd)'これが機能する理由、およびPS1 = $(pwd)と異なる理由
このコマンドを入力すると、プロンプトがディレクトリに変わるのはなぜですか? PS1='$(pwd)' 私は一重引用符を使用しています。つまり、補間はありませんecho '$(pwd)'-→$(pwd) さらに、これがなぜ機能するのかを明確にしたとしましょう...なぜ機能が異なるのPS1=$(pwd)ですか?(引用符なし) 別の言い方をすれば、引用符を使用すると、ターミナルをナビゲートするときにプロンプ​​トが現在のディレクトリに変わり続けるということです。しかし、引用符を使用しない場合、プロンプトは常に、コマンドを最初に入力したときのディレクトリのままです。PS1=$(pwd) どうして?
18 bash  zsh  prompt  pwd 

4
現在のシェルを確認するcheckbashisms準拠の方法
私.profileので、次のコードを使用して、ログインシェルが実際にBashである場合にのみBash関連のエイリアスと関数がソースされるようにします。 # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 現在、シェル構成ファイル、スクリプト、および関数をバージョン管理下に置いています。また、最近、Bash固有の機能の恩恵を受けないカジュアルなBashismをシェルスクリプトから削除するプロセスを開始function funcname()しましたfuncname()。たとえば、に置き換えます。 シェルファイルリポジトリには、リポジトリ内の各ファイルでDebianのdevscriptsパッケージからユーティリティを実行するpre-commitフックを設定し、Bash固有の構文を誤って導入しないようにしました。ただし、これによりmyのエラーが発生します。checkbashismssh.profile possible bashism in .profile line 51 ($BASH_SOMETHING): if [ "${BASH_VERSION:-}" ]; then 私は、どのシェルが実行されているかをチェックする方法があり、それが警告をトリガーしないかどうか疑問に思っていましたcheckbashisms。 POSIXによってリストされたシェル関連の変数のリストをチェックして、現在のシェルを表示するために使用できることを期待しました。また、インタラクティブなDashシェルで設定された変数を調べましたが、適切な候補を見つけることができませんでした。 現時点では、.profile処理対象から除外していますcheckbashisms。小さいファイルなので、手動で確認するのは難しくありません。ただし、問題を調査した後、実行中のシェル(または少なくともcheckbashisms失敗を引き起こさない方法)を判別するPOSIX準拠のメソッドがあるかどうかを知りたいと思います。 さらなる背景/説明 …

3
[“ $ {1:0:1}” = '-']の意味
MySQLプロセスを起動する次のスクリプトがあります。 if [ "${1:0:1}" = '-' ]; then set -- mysqld_safe "$@" fi if [ "$1" = 'mysqld_safe' ]; then DATADIR="/var/lib/mysql" ... このコンテキストで1:0:1はどういう意味ですか?
18 linux  bash  shell 

2
私のコマンドの最後でこれをどのように実行し、スクリプトを非常に高速にしましたか?
オンラインでいくつかのCTFの課題を解決しているときに、サーバーをブルートフォースする必要がある状況に遭遇しました。これは私が書いたコードです: #!/bin/bash for i in {0..9}{0..9}{0..9}{0..9} do echo "Now trying code.." echo $i echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt done これは、信じられないほど、非常に遅いものでした。1000〜9999の組み合わせを試す必要があり、10回の試行ごとに約5秒かかりました。次に、アドバイスに従って、この行の最後に「&」を付けます。 echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt & そして、数秒で数百の組み合わせを試しました。とても驚いた。誰かが私にロジックを説明できますか?「&」は何をしましたか?

3
すべてのシェル変数をリストするにはどうすればよいですか?
この質問について読む:zshでは、どのようにしてすべての環境変数をリストできますか?、私はどうすればすべてのシェル変数をリストできますか? また、シェル変数と環境変数の区別は、zsh以外のシェルにも適用されますか? 私は主にBashとZshに興味がありますが、他の主流のシェルでこれを行う方法を知ることは素晴らしいことです。

4
#!/ bin / shまたは#!/ bin / bashを使用して、Ubuntu-OSXの互換性と使いやすさ、POSIXを実現します。
いずれかのスクリプトを最初の行として使用して、目的のシェルを呼び出すことができることを知っています。 う#!/bin/sh、すべてのUNIXシステムとの互換性が絶対条件である場合にはお勧めできますか? 私の場合、私が気にしているOSはUbuntu(Debian)とOSXだけです。それを考えると、#!/bin/bash両方のシステムで使用できると確信できますか? これにより、コマンドの構文がより近代的で明確なスクリプトを使用しやすくなりますか?#!/bin/sh使用はPOSIXの使用にも関連していますか?
18 bash  shell  ubuntu  osx  posix 

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