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

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

5
オンラインのbashスクリプトテストサイトはありますか?
友達をbashスクリプトで支援する必要がある場合があります。Windowsマシンを使用している場合、それは作業環境であり、Cygwinをセットアップしたり、VMを使用したりすることはできません。 私が使用できる無料のスクリプトWebサイトはありますか?できれば、Puttyを使用してそれを接続できる場所などがありますか?
10 bash 

7
5でカウントアップするスクリプトを作成するにはどうすればよいですか?
私は非常に単純なbashスクリプトを作成して、375から3500(375、380、385 ...)の間の5の倍数をすべてリストしようとしていました。私が試したがうまくいかなかったのは: for i in {375..3500} do echo $i (($i += 5)) done 私はしばらくしてあきらめ、これをBASICで約15秒で書きました。 10 count = 375 20 print count 30 count = count+5 40 if count < 3500 then goto 20 BASICプログラムをbashスクリプトで作成するにはどうすればよいですか?
10 bash  shell  scripting 

1
bashでの複数行の貼り付けを防止する
私はよくctrl+cguiアプリケーションからテキストをコピーし、右マウスクリックメニューを使用してターミナルエミュレーター(ターミネーター)に貼り付けて貼り付けます。クリップボードに複数の行が含まれていることを忘れることがあります。bashに貼り付けると、各行が「実行」されます 複数行の貼り付けを完全に防ぐための解決策はありますか?

6
awk内にファイルが存在するかどうかをどのように確認しますか?[-d 'ファイル名']失敗
存在しないホームディレクトリセットを持つユーザーのリストを生成しようとしています。これはawkで実行できるはずですが、構文に問題があります。 ]で「無効な構文」と何度も言われます。何が悪いのですか? awk -F: '{ if(![ -d "$6"]){ print $1 " " $3 " " $7}}' /etc/passwd 私がおそらく最終的に使用するコードは次のとおりです。 awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd そして、私はここに関連する質問があります。
10 bash  awk  directory 

3
「read」を使用してスクリプトをパイピングしてbashする
私はそれを通すことによって、スクリプトを実行する必要があるbashとwget(いうよりはbashで直接それを実行しています)。 $ wget -O - http://example.com/my-script.sh | bash スクリプトにreadステートメントが含まれているため、機能しません。何らかの理由で、bashにパイプする場合、これらは機能しません。 # Piping to bash works in general $ echo 'hi' hi $ echo "echo 'hi'" | bash hi # `read` works directly $ read -p "input: " var input: <prompt> # But not when piping - returns immediately $ echo 'read …
10 bash  shell  pipe  read 

3
コマンドライン引数として数値をどのように追加しますか?
コマンドラインから1つの数字と、デフォルトのように1つの数字を追加しようとしています。例:ユーザーが50を入力すると、スクリプトは10を追加します(デフォルトの数として)。 ./script 50 The sum of 50+ 10 is 60. これが今のところです。 echo -n "Please enter a number: " read number default = 10 sum = $((default + number)) // this line does not seem to work echo "The sum of $number and 10 is $sum." 構文が間違っていますか?私が正しい軌道に乗っているかどうかはわかりません。数字を間違って追加していますか?代わりにawkを使用する必要がありますか? let sum = $default …
10 bash 

3
$ PWDを変更した後、bashでコマンドを実行するにはどうすればよいですか?
zshは、ユーザーがディレクトリを変更した後に関数を実行するためのものなど、いくつかの素晴らしいフック関数を提供しますchpwd。 # zsh only function greet() { echo 'hi'; } chpwd_functions+=("greet") cd .. # hi pushd # hi popd # hi 私はそれをbashでエミュレートしようとしています。 制約: インタラクティブシェルと非インタラクティブシェルの両方で機能する必要があります。つまり、次のようなものに依存することはできません $PROMPT_COMMAND cdディレクトリを変更する任意のコマンド(例:pushdおよびpopd)で機能させるため、再定義できません。 これは、実行する必要があります後ので、ユーザーの指示trap "my_function" DEBUG私は何とかそこに言うことができない限り、仕事は「最初の実行、ない$BASH_COMMAND、我々は閉じ込められ、その後もこれを行う...」私はの自動実行を回避できることがわかり$BASH_COMMAND 場合が extdebug有効になっていますそして、trap関数は1を返しますが、強制したくないと思います。成功した(ただし変更された)コマンドにextdebug戻るの1は間違っているようです。 最後の部分-「ユーザーのコマンドの後に実行」-は現在私が困惑しているものです。各コマンドの後に関数を実行できる場合は、前回チェックしてからディレクトリが変更されたかどうかをチェックすることができます。例えば: function check_pwd() { # true in a new shell (empty var) or after cd if [ "$LAST_CHECKED_DIR" != …
10 bash  hook  pwd 

3
バッシュで、エイリアスに余分な引数を含めない方法は?
私は次のようなことをしようとしています alias ftp='echo do not use ftp. Use sftp instead.' ftp誤って使用されることはありません。しかし、私はそれに気づきました ftp abcd.com コマンドをエコーさせます do not use ftp. Use sftp instead. abcd.com ためabcd.comの引数であると解釈されますecho。 Bashをabcd.com置換に追加しないようにする方法、またはechoそれを追加の引数として使用しないようにする方法はありますか?(各アプローチの解決策はありますか?) できると思った alias ftp='sftp' しかし、コマンドを一緒に停止させて、使用しないように気づかせたいだけですftp。
10 bash  alias  ftp  echo 

4
`tail -f / proc / $ pid / fd / 1`できないのはなぜですか?
私はechoそのPID を示す簡単なスクリプトを書きました。 #/bin/bash while true; do echo $$; sleep 0.5; done 私は38441つのターミナルで上記のスクリプト(何度も何度も言う)を実行してtailおり、別のターミナルでファイル記述子を試行しています。 $ tail -f /proc/3844/fd/1 画面には何も表示されず、までハングし^cます。どうして? また、すべてのSTDファイル記述子(IN / OUT / ERR)は同じptsにリンクしています。 $ ls -l /proc/3844/fd/ total 0 lrwx------ 1 mg mg 64 sie 29 13:42 0 -> /dev/pts/14 lrwx------ 1 mg mg 64 sie 29 13:42 1 -> /dev/pts/14 …

4
$ 1が1でなくても、 'if [$ 1 =“ 1”]'ブランチが常に選択されるのはなぜですか?
次のような「teleport.sh」という名前のシェルスクリプトがあります。 if [ $1="1" ]; then shift mv "$@" ~/lab/Sun elif [ $1="2" ]; then shift mv "$@" ~/lab/Moon elif [ $1="3" ]; then shift mv "$@" ~/lab/Earth fi 私が実行すると: sh teleport.sh 2 testfile これtestfileは~/lab/Sunディレクトリに移動されますが、そのスクリプトに1または '1'を渡さなかったため、非常に混乱しています。 ここで何が問題になっていますか?
10 bash  shell  test 

4
ディレクトリのおおよそのサイズを取得します(すべてのファイルとサブディレクトリを再帰的に含めます)
ディレクトリ(再帰的に、そのすべてのサブディレクトリを含む)の正確なサイズをすばやく取得する方法はありますか?サブディレクトリのサイズは必要ありません。レポートされた合計サイズに再帰的に含める必要があることを意味します。 失敗した場合、おおよそのサイズを取得する方法は?dfファイルシステム全体に対して迅速な応答が得られるようなものを考えていますが、今回は特定のディレクトリ(およびそのサブディレクトリ)についてです。 使用duするソリューションは、ディレクトリに数千のサブディレクトリが含まれている場合、時間がかかるようです。
10 bash 

1
Bashで「エイリアス」を作成する方法はいくつありますか?
私は2つの方法しか知りません:alias foo=barとfunction foo() { bar }。 私が質問している理由は、bashセッションの1つで突然- がエラーになるlnため、コマンドを実行できないためbashです-bash: /usr/local/.../ln: No such file or directory(/usr/local/.../は私のPATH環境変数のエントリの1つです)。 PATHただし、問題が発生することはありません。実行するwhich lnと期待されるバイナリが出力されるためです/usr/bin/ln(絶対パスを指定すれば問題なく実行できます)。 私はまたのためにチェックしln、私にaliasとfunction宣言し、何もありません。 $ declare -f | grep ln $ alias | grep ln 問題は1つのbashセッションで発生しているだけです。新しいシェルを開始すると、再び正常に機能しますが、この特定のbashセッションで突然この問題が発生した原因を知りたいのです。 これを引き起こしている可能性のあるものに関するアイデアはありますか?
10 bash  shell  alias 

4
現在のパスにあるすべてのファイル/バイナリを一覧表示します
現在のPATH内のすべてのファイル/実行可能バイナリを一覧表示するための「ls -la」スタイルのコマンドを実行する「簡単な」方法はありますか? (私は出力をgrepにパイプして、プレフィックスは不明であるが基本的には「名前」がわかっているコマンドを探すために、bashのオートコンプリート/タブ移動が本質的に役に立たない場合の種類です。したがって、ある種の「逆オート完全な機能」...)
10 bash  ls  path  autocomplete 

5
bashのパス名のパターンマッチング
ディレクトリ内のサブディレクトリのリストを操作したい。検討してください: for x in x86-headers/*/C/populate.sh; do echo $x; done これは与える x86-headers/elf/C/populate.sh x86-headers/gl/C/populate.sh x86-headers/gmp/C/populate.sh x86-headers/gnome2/C/populate.sh x86-headers/gtk2/C/populate.sh x86-headers/jni/C/populate.sh x86-headers/libc/C/populate.sh しかし、私は対応して経路の第2の部分に、という値が欲しい elf、glなど私が大手を取り除く方法を知っているがx86-headers。 for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done 与える elf/C/populate.sh gl/C/populate.sh gmp/C/populate.sh gnome2/C/populate.sh gtk2/C/populate.sh jni/C/populate.sh libc/C/populate.sh また、パスの後半の用語を取り除く方法も知っています。つまり、1レベル下がっています。 cd x86-headers for x in */C/populate.sh; do i=${x%%/*}; echo $i; done 与える elf …

3
シェルスクリプトは#!なしでも動作します(sha-bang行)
私はシェルスクリプトに慣れていないため、スクリプトの先頭に#!(sha-bang)行を使用してインタープリターを呼び出す多くの本が書かれています。これにより、スクリプトの新しいシェルが呼び出され、行ごとに解釈が行われます。私の基本的なスクリプトの一部はまだ魔法の行なしで実行されています。 だから私の質問は: 基本的なスクリプトはどこからインタープリターを取得しましたか。 スクリプトがインタープリターを特定する方法を教えてください。 次に、基本的なスクリプトについて説明します。スクリプトには次の行が含まれています。 「魔法の線のない基本的なスクリプト」をエコー

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