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

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

2
bashで文字を1文字ずつ読み取る
私はbashを使用してファイルを1文字ずつ読み取ろうとしています。 多くの試行錯誤の結果、これが機能することがわかりました。 exec 4<file.txt declare -i n while read -r ch <&4; n=0 while [ ! $n -eq ${#ch} ] do echo -n "${ch:$n:1}" (( n++ )) done echo "" done つまり、1行ずつ読み取って、各行をcharごとにループできます。 これを行う前に、私は試し ましたが、ファイル内のすべての空白exec 4<file.txt && while read -r -n1 ch <&4; do; echo -n "$ch"; done がスキップされました。 理由を教えてください。2番目の戦略(つまり、bashの読み取りで文字ごとに読み取る)を機能させる方法はありますか?
8 bash  readline 

4
lsで相対パスを取得する方法は?
最後にダウンロードした2つのファイルを移動するには、次のようにします。 mv ` ls -rt ~/Downloads/ | tail -2 ` . 残念ながら、lsファイル名のみを提供します。上記のコードをどのように適応できますか? (誰かが指摘する前に、私はの出力をパイプ処理する際の問題を認識していますls。これは、問題のファイル名がわかっている場合にのみ使用します。)
8 linux  bash  ls 


1
shopt extglobを設定するためのスコープ制限は何ですか?と他のオプション?
私の非インタラクティブbashシェルにはがありextglob offます。コマンドの直前のステートメントでオンにしたいのshopt -s extglobですが、if .. then .. elseブロック内にあるとどういうわけか登録されないことに気づきました。 次のextglob-dependantコマンドは無効です:syntax error near unexpected token '('。 どこextglobに設定でき、なぜ制限があるのですか?これは他のオプションにも当てはまりますか?... GNU bash 4.1.5 これは機能します: shopt -s extglob if true ;then touch a.bcd; ls a.@(bcd) fi これは失敗します: if true ;then shopt -s extglob touch a.bcd; ls a.@(bcd) fi ... line 17: syntax error near unexpected token …
8 bash  shopt 

1
Bashスクリプトが入力を読み取らない
コマンドをバックグラウンドで実行することを想定したスクリプトがあります。問題は、スクリプトが読み取りコマンドに遭遇したときに、一時停止して入力を受け付けないことです。ここにあります: printf "Where is yo music?: " read musicPath cd $musicPath ls | while read currentSong;do seconds=`mdls "$currentSong"|sed -n '20p'|awk '{print $3}'|cut -d. -f1` hours=$((seconds / 3600)) seconds=$((seconds % 3600)) minutes=$((seconds / 60)) seconds=$((seconds % 60)) echo "Song: $currentSong" echo "Length: $hours:$minutes:$seconds" afplay "$currentSong"& printf "yes (y), no (n), or …

1
シェルスクリプトがbashまたはshのどちらで記述されているかを確認する方法
スクリプトが記述されているかどうかを確認するにはどうすればbashよいshですか? Linuxではbashスクリプトに次の行があるため、スクリプトの最初の行はここでは役に立ちません。 #!bin/sh 実際には、Bourne Shellではなく、/bin/shbash(おそらくこれらのディストリビューション/bin/shへのリンク/bin/bash)である多くのディストリビューションがあります。したがって、FreeBSDなどでbashで記述されたスクリプトを実行しようとすると、結果は定義されません。これ/bin/shは、FreeBSDではBourne Shellであり、bashではないためです。 スクリプトがbashかshかを識別する簡単な方法はありますか? 構文に特徴的な点はありますか?

2
shがbashまたはdashへのシンボリックリンクである場合、bashはそれ自体をPOSIX準拠に制限するため、shと100%互換でなければなりませんか?
bashとshの違いから: 質問への同意:/bin/shbashへのリンクとして持っている場合、bashは、/bin/shとして呼び出されたときと同じように呼び出された場合と同じように動作しません/bin/bash。として呼び出されるとsh、ほとんどの場合POSIX準拠と限定された拡張セットに制限されます。 Linuxでshへのシバンがあるシェルスクリプトに出くわしたときはいつでも#!/bin/sh、そのディストリビューション上であってもbin/sh、ダッシュやbashなどの別のシェルへのシンボリックリンクである場合、ボーンシェルと100%互換性があるはずです。それはそれ自体を限られた拡張セットに制限しますか?それで、私はそれらをFreeBSDで実行できますか?例外はありますか?それとも私はそれがうまくいくと仮定しても安全でしょうか? したがって、ディストリビューションで、bin/shへのシンボリックリンクbin/bashであり、スクリプトの使用#!/bin/shとスクリプトにbashismが含まれている場合、bashはshモードのようになるため、実行されません。

4
cpまたはrsync、cpは本当に価値がありますか?
私は私が使用するための良い理由を見つけるように見えることはできません、これは、本当の答えずに質問としてカウントされません願うcp(1)以上rsync(1)、事実上すべての状況では。1は、一般的に賛成すべきであるrsyncオーバーcp?それらを使用するための良いガイドラインはありますか? rsync:差分を転送します。圧縮を使用できます。リモートで(安全に)使用できます。単一の大きなファイルの転送中でも、中断されても再開できます。」 cp:多分それは単に使用する方が簡単ですか?rsyncより高速ですか?
8 bash  shell  rsync  utilities  cp 

4
指定された文字列の前にあるファイルをアルファベット順に検索します
ファイルとサブディレクトリでいっぱいのディレクトリがある場合。与えられた文字列の前にアルファベット順に並ぶ通常のファイルだけをリストする最良の方法は何ですか? 現在、bashを使用して実行できる最善の方法は次のとおりです。 for x in `find . -maxdepth 1 -type f | sort` do if [[ "$x" > './reference' ]] then break fi echo $x done これを行うにはもっと簡潔な方法があるように感じますが、それが何かはわかりません。何か案は?
8 bash  filter 

3
passwdでHTTP_PROXYおよび特殊文字をエクスポートする
議論のために、以下の私のパスワードが abc123@ パッチとアップデートを取得するには、企業のプロキシを介してLinuxマシンを認証する必要があります...通常はこれを使用します。 export HTTP_PROXY='http://<Americas\Username>:<Password>@proxy.foo.com' export http_proxy='http://<Americas\Username>:<Password>@proxy.foo.com' しかし、で終わる実際のパスワードを置き換えて@を実行するとaptitude update、... [mpenning@netwiki ~]$ sudo -E aptitude update Err http://mirror.anl.gov squeeze Release.gpg Could not resolve '@proxy.foo.com' Err http://mirror.anl.gov/debian/ squeeze/main Translation-en Could not resolve '@proxy.foo.com' 私はでパスワードを\@エスケープし、両方を\@\@2文字(@@)でエスケープしようとしましたが、これが正しくプロキシされないようです。最近パスワードを変更するまで問題はありませんでした。 パスワードをエスケープする正しい方法は何bashですか?

2
bashでワイルドカードのタブ補完を有効にする方法は?
次のようなステートメントのbashでタブ補完を有効にするにはどうすればよいvim db/migrate/*creaですか?基本的に、正規表現に一致し、オプションを提示するためのタブ補完を探しています。 これを行うにはどうすればよいですか? この質問は私がここで尋ねたものに関連しています


6
改行を付けずにgrepを出力する
このスニペットを検討してください: X=$(grep -m1 'some-pattern' some-file | sed -n 's/.* //p') 任意のテキストファイルの行でパターン条件が一致した場合、最後の単語を変数に入れたい 私の問題は、私がXやろうとしている後の操作を妨げるので、変数が最後にCRまたはLFまたはCRLFを持っていることです。 私は次のようなことも試しました: X=$(grep -m1 'some-pattern' some-file | sed -n 's/.* \([A-Za-z]\+\)/\1/p') したがって、sed出力が制限されることを期待してい[A-Za-z]+ますが、X変数内にはこの厄介なバイトが残っています。 どのように私が見るように、あまりにも多くのコードを使用せずに、それを取り除くことが可能と終わりに何バイトでxxd、その後cutそれと類似の合併症?
8 bash  grep 

7
ファイル名を短縮するLinuxスクリプトまたはプログラム
Linux版のnamemanglerを見つけるのにあまり成功していません。Windowsで読めるように1000個のファイルの名前を変更する必要があります。 これを実行できるLinuxプログラムを知っている人はいますか? そうでない場合、フォルダ内のすべてのファイルの名前をたとえば最初の16文字に変更するだけでよいため、スクリプトが機能する可能性があります。スクリプトルートを下る価値はあるかもしれませんが、どこから始めればよいかわかりません。

4
マウントされたntfsシステムで過去2日間のファイルを表示しますか?
2日未満のファイルを表示するコマンドは正確に何ですか?私はこのようなものについて考えました: $ find / -mtime -2 ...しかし、見つかったファイルの日付を印刷する方法がわかりません。私の目標は、マウントされたntfsシステム上のファイルで、過去数日のうちに新しくまたは変更されたものを見つけることです。 さらに、結果を新しいものから古いものに並べ替えると非常に役立ちます。それは可能ですか?

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