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

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

1
bashrcの遅延置換
〜/ .bashrcが実行されるとき(ターミナルを開くとき)ではなく、実行時に置換~/.bashrcを評価$()するエイリアスをどのように取得しますか? このコマンドを頻繁に実行して、エイリアスを追加します。 svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff ただし、~/.bashrcエイリアスとして追加すると、ターミナルを開いたときの評価にハードコードされていることがわかります。 $ alias alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff' 端末を開いた場合、~エラーが発生します。 svn: E155007: '/home/dotancohen' is not a working copy svn: E155007: '/home/dotancohen' is …
10 bash  shell  quoting  alias  bashrc 


1
ブレースの拡張範囲が3つ(省略記号)ではなく2つのドットを使用するのはなぜですか?
ようやくbash(さらにはzsh)ブレースの拡張範囲を適切に使用できなかった理由を最後に理解/発見しました。構文は{1..10}、省略記号、つまりと想定したものではありません{1...10}。 3つのドットよりも2つのドットが選ばれた理由を教えてください。(Wikipedia)リンクに示されているように、コンピュータープログラミングでの省略記号の使用は一般的でよく理解されているため、これが私の好奇心を刺激しました。

2
bashがSIGTERMを無視するのはなぜですか?
時々私はすぐにログアウトしたいときはやりますkill -15 -1。bashがSIGTERMを無視していることに気づきました。 私はそのようなbashの振る舞いの根拠は何ですか? 正当な理由なしにSIGTERMを無視することは、UNIXではありませんよね。 更新: すべてに同じ(無)効果: $ kill -TERM $$ $ type kill kill is a shell builtin $ command kill -TERM $$ $ /bin/kill -TERM $$ UPDATE2: man bashから: bashが対話式の場合、トラップがない場合、SIGTERMは無視されます 故意に行われます。しかし、なぜ?
10 bash  signals 

4
bashスクリプト内でchown $ USER:$ USERを使用する
私が実行している小さなbashスクリプトで、作成された新しいディレクトリを変更しようとしています。私は追加しました: sudo chown $USER:$USER /var/www/$sitename sudo chmod 775 /var/www/$sitename mkdir(sudo mkdir /var/www/$sitename)の行の後。 何らかの理由で、chownが実行されていません。手動で実行できますが、ファイルに書き込んでも動作しません。「chown」が「mkdir」および「chmod」と同じ色で強調表示されていないことに気付きましたが、問題を理解できません。 ここでchownが機能しないのはなぜですか? それは問題$USER:$USERですか? 編集これ が完全なスクリプトです。root以外のユーザーがスクリプトを実行した場合、どのようにファイルを変更しますか? #!/bin/sh #!/bin/bash # New Site cd /etc/apache2/sites-available/ echo "New site name (test.my):" read sitename echo "<VirtualHost *:80> ServerAdmin admin@$sitename ServerName $sitename ServerAlias $sitename DocumentRoot /var/www/$sitename <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory …

2
パイプでスクリプトを使用しているときにユーザー入力を読み取る方法
一般的な問題 パイプのチェーンの途中であっても、ユーザーと対話するスクリプトを記述したいと思います。 具体例 具体的には、fileまたはを受け取り、stdin行(行番号付き)を表示し、選択範囲または行番号の入力をユーザーに要求し、対応する行をに出力しstdoutます。このスクリプトを呼び出しましょうselector。それから基本的に、私はできるようになりたいです grep abc foo | selector > myfile.tmp foo含む場合 blabcbla foo abc bar quux xyzzy abc 次に、selector(ターミナルではなく、myfile.tmp!)オプションを表示します 1) blabcbla 2) foo abc bar 3) xyzzy abc Select options: その後入力します 2-3 そして結局 foo abc bar xyzzy abc の内容としてmyfile.tmp。 私はセレクタースクリプトを起動して実行しています。入力と出力をリダイレクトしなければ、基本的には完全に機能しています。そう selector foo 私が望むように動作します。ただし、上記の例のように物事を一緒にパイプする場合、selectorは提示されたオプションをに出力myfile.tmpし、grepped入力から選択を読み取ろうとします。 私のアプローチ 次のように、の-uフラグを使用しようとしましreadた exec 4< /proc/$PPID/fd/0 exec …

2
bashがエコーを停止した場合はどうすればよいですか?
私が仕事で使用しているアプリケーションの1つは、bashにねじ込むことがあるので、自分の入力が表示されなくなりました。すなわち $ echo foo foo $ なる $ foo $ 私は誤って実行しようとしましstty -echoたが、問題がさらに悪化しました。現在、コマンドの受け入れが停止し、入力が何らかの状態になり、>改行するたびに表示され、それ以外は何も表示されなくなりました。 私は何をすべきでしたか?

4
Bashスクリプトは、それがどのように実行されたかをどのようにして知ることができますか?
私は、エコーを介して確認する小さな変更でかなり複雑なコマンドを実行できるようにするために作成しようとしたBashスクリプトを持っています。 コマンドを実行するために端末を強制的に実行する解決策を見つけましたが、私はそのことに興味がありません。私がやりたいことは、Nautilusでスペースを空けてEnterキーを押すだけ(Run Softwareで実行させる)の場合、「端末から実行してください」という通知が表示されます。 私はコマンドを知っているように、ポップアップを発生させることができますが、ターミナル内で実行されているかどうかをBashスクリプトに通知することはできません。常にそうだと思われます。可能ですか?

3
読みながらバックスペースを処理する方法は?
入力されたバックスペースをどのように処理します^?か?試行されたかどうかread、および12^?3すでに5文字が完了したように文字を数える方法が表示されます(ただし、すべて実際の入力ではありませんでした)が12^?3^?、プロンプトが返された後、奇妙です。助けてください! -bash-3.2$ read -n 5 12^?3^?-bash-3.2$
10 bash  shell  line-editor  read 

3
bashでの$&の使用法は何ですか?
私はbashの特別なパラメータを調べていました。何が$&どのように違うのか知りたいです$_。 コマンドを実行すると次の出力が表示されますが、意味も見つかりませんでした。 k@Linux:~$ echo $& [1] 12397 $ k@Linux:~$ echo $n [1]+ Done echo $ k@Linux:~$
10 bash  shell 

6
bashで末尾の改行を削除するにはどうすればよいですか?
Perlのように動作するものを探していchompます。私は単に入力を表示するコマンドを探しています。それが改行の場合は最後の文字を差し引いたものです。 $ printf "one\ntwo\n" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done $ printf "one\ntwo" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done (BashとZshでコマンドを置換すると、末尾の改行がすべて削除されますが、末尾の改行を最大1つ削除するものを探しています。)

2
リモートマシンでスクリプトを実行すると、ファイル名に疑問符が含まれるのはなぜですか?
現在の日付をフェッチし、PHPスクリプトを実行して、出力(およびエラー)を現在の日付を含むファイル名にリダイレクトする小さなスクリプトがあります。 DATE=$(date +"%Y%m%d") FILE="log/${DATE}.log" php -q script.php >> $FILE 2>&1 このスクリプトをローカルマシン(Windows 7、Aptana IDE)で実行すると、PHPスクリプトは正常に動作し、ログファイルには予期されたファイル名(例:)が含まれます20140502.log。 しかし、そのスクリプトをSFTP経由でリモートマシンにプッシュしてそのスクリプトを実行すると、ファイル名は次のようになります。 20140502?.log? 何が問題でしょうか?これはencondingエラーですか(たとえば、SFTPアップロードのエンコーディングはANSIIであり、UTF-8が期待されます)?または、スクリプト自体で何かを変更する必要がありますか? システム/シェルに関する情報: [foo@bar path]$ sh --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) 面白い事実:そのスクリプトがcronjobによって呼び出された場合、疑問符は発生しません。スクリプトを手動で実行した場合のみ。


1
IFSのデフォルト値を理解する
私のGNU bashバージョン4.2.8では、IFSにはデフォルトでスペース、タブ、およびラインフィードのデフォルト値があります。 usr@T42 ~ $ echo -n "$IFS" | hexdump -C 00000000 20 09 0a | ..| 00000003 usr@T42 ~ $ そのようなデフォルトのIFSには理由がありますか?さらに、bashビルトインの他にどのユーティリティがIFSを使用しreadますか?
10 bash  shell  quoting 

3
変数に格納されている引数をWGETに渡すにはどうすればよいですか
私は広範囲にwgetを使用するbashスクリプトを書いています。すべての共通パラメーターを1か所で定義するには、変数に格納します。これがコードの一部です。 useragent='--user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"' cookies_file="/tmp/wget-cookies.txt" save_cookies_cmd="--save-cookies $cookies_file --keep-session-cookies" load_cookies_cmd="--load-cookies $cookies_file --keep-session-cookies" function mywget { log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $quiet $useragent $load_cookies_cmd $@" wget $useragent $load_cookies_cmd "$@" } サッドが機能していません。どういうわけか、変数$ useragent、$ save_cookies_cmd、$ load_cookies_cmd、およびこれらの変数をパラメーターとして渡すcaling wgetにパラメーターを格納する正しい方法がありません。 次のような結果のコマンドラインが必要です。 wget --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" --load-cookies /tmp/wget-cookies.txt …

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