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

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

2
ファイルを圧縮するときにディレクトリを除外する
私は次のようなことをするbashスクリプトを持っています: zip -0 ../backup/backup.zip \ -r ./* \ -x \*CVS\* \ -x *Thumbs.db* \ バックアップしているディレクトリはSVNアーカイブです(以前はCVSでした)。.svnとその内容を除外することができませんでした。.svnを(ツリー全体を再帰的に)除外する最もクリーンな方法は何ですか?
11 bash  scripting  zip 

4
多くの画面ウィンドウで履歴を簡単に検索できますか?
私の現在のscreenセッションには、12の開いているウィンドウがあります。数週間実行されています...先週、これらの12画面のウィンドウの1つで ImageMagick convertコマンドを実行しました... 12インスタンスすべてのBash履歴を閉じたり実行したりせずに簡単に検索できますか?全12画面で?history | grep convert

2
入力の最後に空の行を追加する
このように、最後に改行なしで出力を生成するコマンドがあります Myprompt$ somecmd dksfjdl dsfjdlkfj dsfjdkfj dfjdkfjMyprompt$ 現在私はこれを克服somecmd | sed 's/$/\n/' | tr -s '\n' していますこれを行うより良い方法はありますか?

2
bashで感嘆符を適切にエスケープする方法は?
今日、Twitterのパスワードジェネレーターをゴルフでコーディングしようとしたときに、私は手ぶれで捕まった。 import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9)) 90文字。それは多くの予備スペースなので、私は基準を引き上げ、それも実行可能にすることにしました。 echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg 139文字。感嘆符で明らかにbashチョークを除いて、いいですね。 badp@delta:~$ echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg bash: !/usr/bin/python\nimport: event not found 厄介な感嘆符。「逃げよう」と思った!結局のところ、私には予備のキャラクターが1人います。 echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg 明らかに... badp@delta:~$ echo -e "#\!/usr/bin/python\nimport string as s,random;print …

8
お気に入りのシェルスクリプトGUI / CLIエディターとは何ですか、そしてなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 2年前に閉店。 現在、bashスクリプトの編集にvimを使用していますが、実際にそれを設定したり、プラグインをインストールしたりする必要があります。プラグインの提案を歓迎します。いずれにせよ、この仕事にどのエディター/ IDEがあるのか​​を確認したいと思います。
11 bash  editors 

3
SSH経由のリモートforループ
スクリプトに次のものがあります for server in ${servers[@]}; do echo ${server} ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done" done しかし、それは機能しません。奇妙なことに、$ Iの改行が表示されます。したがって、10個のファイルがある場合、10行の空白行が表示されます。
11 bash  ssh  quoting 

2
pwdが--physicalのような長いオプションを受け入れないのはなぜですか?
pwdコマンドのマニュアルを表示すると、などの長いオプション--physicalがサポートされていると表示されます $ man pwd PWD(1) User Commands PWD(1) NAME pwd - print name of current/working directory SYNOPSIS pwd [OPTION]... DESCRIPTION Print the full filename of the current working directory. -L, --logical use PWD from environment, even if it contains symlinks -P, --physical avoid all symlinks ただし、次のように入力すると失敗します $ pwd --physical -bash: …
11 bash  rhel  pwd 

1
コマンドとそのオプションへの引数として中括弧{}の使用
例 私は最近{}、開始括弧と終了括弧の間に何もない、括弧のペアをコマンドの引数として、さらにはオプションの引数として使用する例を見つけました。 cat foo | xargs -I{} echo {} find . -size 0 -exec rm -i {} \; ドキュメントなし 私の問題は、上記の例のようなコンテキストでのの使用法を説明するドキュメントがGNU Bashマニュアルに見つからないこと{}です。 のようにパラメータ展開では、括弧が括弧で囲まれている必要があるため、これはパラメータ展開ではないと思います${}。 これはブレース展開にすることもできません。なぜなら、それは{x..y[..incr]}、where の形式をとっており、オプションxでyはないからです。 また、は引数として使用されるため、コマンドグループにすることもできません{}。 ご質問 括弧で囲まれたペアは、{}それを受け入れるコマンドの引数として、一般的にどういう意味ですか? {}引数の使用法を説明したドキュメントはどこにありますか?
11 bash  shell 

2
posixシェル:環境変数名のリストを出力します(値なし)
複数の実装で機能するposix互換の方法で、現在定義されている環境変数のリストをそれらの値なしで出力するにはどうすればよいですか? 一部の実装(mksh、freebsd / bin / sh)では、export単独で使用するだけで十分です。 $ export FOO2 FOO ただし、他の一部の実装(bash、zsh、dash)ではexport、値も表示されます。たとえば、bashの場合: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ asdkj=fkajdsf:\$ \t:askjfkajsf=asdfkj:\$ safdkj$ 他のオプションのような、envまたはprintenv値のない変数名のみを出力するオプションはありません。少なくとも、私が試したlinuxおよびfreebsdプラットフォームではそうではありません。 awk / sed / etcへのパイピング。または、パラメーター展開手法(例:)を使用してリストをトリミングする${foo%%=*}こともできますが、行をまたがる可能性が=あり、値に空白が含まれる可能性がある値を処理する必要があります(上記の例を参照)。 特定のシェル実装に固有の回答は興味深いですが、私は主に実装間で互換性のあるものを探しています。

3
シェルスクリプト:内部にオプションがある変数を作成する
次のパラメーターを指定したrsyncコマンドがあります。 rsync -avz --{partial,stats,delete,exclude=".*"} そのパラメーターを変数内に配置して、スクリプトで後で再利用したいと考えています。このようなもの: #!/bin/bash VAR=rsync -avz --{partial,stats,delete,exclude=".*"} $VAR /dir1 /dir2 引用符、単一引用符、角かっこで試したが、成功しなかった。

6
改行で終わらないかもしれない行指向のファイルを読む
/tmp/urlFile各行がURLを表すという名前のファイルがあります。次のようにファイルから読み取ろうとしています: cat "/tmp/urlFile" | while read url do echo $url done 最後の行が改行文字で終わっていない場合、その行は読み取られません。なんでかしら? 新しい行で終わるかどうかに関係なく、すべての行を読み取ることはできますか?

1
tty出力を持つ変数コマンドでstdinとstdoutをパイプするとき、zshは端末に入力できません
システム情報: macOS Sierra 10.12.6 zsh 5.4.2 (x86_64-apple-darwin16.7.0) GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0) 私が作成した簡単な例を詳しく知りたい場合は、一番下の「例」までスクロールしてください。 注:私は大したzshユーザーではありません。 私は見ていたfzfためにキーバインドbashとzsh。 どちらも変数コマンドを実行する方法に注意してください$(__fzfcmd)。__fzfcmdデフォルトでfzfはstdoutに出力し、パラメーター置換fzfは出力から得られたコマンド()を実行するだけです。 間の一つの違いbashとzshスクリプトがあることbashつの更なるパイプの出力は$(__fzfcmd)なく、zsh単に配列の内部に取り込みます。私の推測では、入力できない場所zshの出力をさらにパイプfzfするfzfと、パイプされたプロセスがfzfstdinを取得できないという問題が発生したためです。あなたの唯一の選択は、^Zまたは^Cです。^Cなんらかの理由でプロセスの背景になっているようです。または、多分彼らはそれを実行zle vi-fetch-historyすることができるように配列でそれを望んだだけです。bashバージョンは、との結合キーにいくつかの魔法を行います"\e^": history-expand-line 今fzfは重要ではありません。ttyこの問題を発生させるには、パラメータ置換によって呼び出されるに出力するプログラムが必要なだけのようです。そこで、いくつかの簡単な例を示します。 でttyこの問題を引き起こす可能性のあるに出力される他のいくつかのコマンドを次に示しますzsh。 vipe(パイプの途中でエディターを実行) 'vim -' (vimをstdinから読み取ります。vipeと同様ですが、stdoutに出力されません) 以下の例で、個別にインストールしたくない場合は、vipeをすべてで置き換えてvim -ください。ただ、それは覚えているvim -ような標準出力に出力し、エディタの内容をしませんvipeありません。 例: 1) echo 1 | vipe | cat # works in both bash and zsh 2) echo 1 | $(echo vipe) | …
11 bash  zsh  pipe  tty 

2
BashスクリプトでSIGHUPが表示されませんか?
次のスクリプトがあります。 #!/bin/bash echo "We are $$" trap "echo HUP" SIGHUP cat # wait indefinitely SIGHUP(を使用してkill -HUP pid)送信しても何も起こりません。 スクリプトを少し変更すると: #!/bin/bash echo "We are $$" trap "kill -- -$BASHPID" EXIT # add this trap "echo HUP" SIGHUP cat # wait indefinitely ...スクリプトがecho HUP終了すると、(Ctrl + Cを押すと)スクリプトが正しく動作します。 roger@roger-pc:~ $ ./hupper.sh We are 6233 ^CHUP …
11 bash  signals 

3
$ HOME / bin dirが$ PATHにありません
私~/.profileには次のbin/ directoryように私の個人をロードする最後のブロックがあります: # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi しかし、ロードされていないようです: echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games なぜこれが機能しないのですか?(私の殻はbashです。) ティガーの編集 echo $0 => bash echo $HOME => /home/student whoami => student less /etc/*-release => PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" …

3
BASHとキャリッジリターンの動作
簡単な質問があります。 bash(私は4.4.11を使用しています)が分離されている/プレーンで終わる行/テキストを表示しないのは正常\rですか? この動作を見て、私は少し驚きました: $ a=$(printf "hello\ragain\rgeorge\r\n") $ echo "$a" george しかし、「こんにちは」というテキストはまだそこにあり、どういうわけか「隠されています」: $ echo "$a" |od -w32 -t x1c 0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a h e l l o \r a g a i n …

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