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

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

5
再アタッチするときにtmuxでenv変数を再設定する必要があるのはなぜですか?
私は主にMacで作業し、Linuxマシンにssh / tmuxを接続して作業をしています。Linuxマシンでssh-agentを実行しています。私が持っています set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY" 私の.tmux.conf。それでも、このセッションに再接続するたびに、実行する必要があります tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK 新しいtmuxウィンドウを$SSH_AUTH_SOCK正しく設定するため。これをする必要はありません。何か案は? 更新 私はこれをうまく説明していないと思います。リモートマシンでシェルを開くためのシェル関数を次に示します。 sshh () { tmux -u neww -n ${host} "ssh -Xt ${host} $*" } tmuxのは、このsshのコマンドを実行すると、$SSH_AUTH_SOCKされないことがあっても、設定された私のローカル環境で設定してください。setenv上記のコマンドを使用してtmuxの環境にこれを配置すると、すべてが正常に機能します。私の質問は、なぜsetenvコマンドを実行する必要があるのですか? 更新2 詳しくは: 既存のセッションにアタッチする$SSH_AUTH_SOCKと、tmux環境(またはグローバル環境)で設定されません。 % tmux showenv | grep -i auth_sock -SSH_AUTH_SOCK 手動で設定すると、動作します: % tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK …

1
シェルスクリプトでの「BASH-isms」の回避
Perl :: Criticに似たツールを使用して、シェルスクリプトを検査し、欠陥、移植性の問題、フォールバックのない非標準プログラムの使用、プログラムの減価償却などを指摘しますか? これset -o posixにより、POSIX以外の使用が無効になりますが、1から始まるzshインデックス付けのシェル配列、0からのbash、配列をまったくサポートしないashなど、知りたいことはわかりません。
37 bash  shell  zsh  ash 

12
よく使用するコマンドをすばやく保存してアクセスする方法は?
私は日常的に実行する必要のあるコマンドをたくさん持っていますが、多くの場合、わずかな違いがあります。 今私はそれらをすべて保存して.bash_history使用していますCTRL- Rそれらにアクセスするために、より良い方法があるのだろうかと思います。私が探しているもの: 新しいコマンドを簡単に追加できます 必要なコマンドを簡単に検索して再実行する 提案で不要なコマンドを避ける 残念ながら、bash_historyは3番目の要求に対してそれほど強力ではありません。数回cdとを実行するとls、履歴ファイルがすぐにいっぱいになります。最近HIST_SIZE、重複または特定のコマンドを回避するために履歴を構成できることを学びましたが、すべてを構成する前に、それが最良の方法であることを確認したかったのです。


2
lsに--zeroまたは-0オプションがない理由はありますか
この質問はls' -1オプションについての質問によって促されましたls。 この出力の再利用はls理解できるように思えます。たとえば、ファイルのリストを並べ替える方法を知っlsている場合は、その出力を他の何かの入力として使用できます。 これらのQ&Aに、適切に動作するファイル名(スペースや改行などの特殊文字は含まれない)で構成されるファイル名リストへの参照が含まれていない場合、コマンドシーケンスが動作しない場合の危険性を指摘する誰かによってコメントされることがよくあります改行、スペースなどを含むファイルです。 find、sortおよび他のユーティリティは、「困難な」ファイル名を通信する問題を解決します。たとえばxargs、ファイル名の有効な文字ではないNUL文字/バイトでファイル名を区切るオプションを使用します/。 Unix / Linuxファイルシステム。 私は(より多くのオプションがリストされています)のmanページlsと出力をls --help探しましたが、ls(from coreutils)にはNULで区切られた出力を指定するオプションがありませんでした。それは持っている-1と解釈できるオプション「改行で区切って出力ファイル名を」) Q:「NULで区切られたファイル名を出力する」またはオプションlsがない理由は技術的または哲学的な理由ですか?--zero-0 意味のあるファイル名のみを出力する(たとえば、使用しない-l)ことを行う場合: ls -rt -0 | xargs -r0 … なぜこれが動作しない、私は何かが欠けていることができ、あるいは私が見落としていることを、この例の代替があり、それははるかに複雑かつ/または不明瞭ではありませんが。 補遺: 行うことはls -lrt -0おそらくあまり意味がありfind . -ls -print0ませんが、そうしないのと同じ方法で、-0/ -z/ --zeroオプションを提供しない理由にはなりません。
37 shell  command-line  ls 

8
git clone後に自動的にcdする方法は?
何かをした後cd、cloneコマンドによって作成されたディレクトリに自動的にしたいgit clone。 重要:Pretzoプロジェクトから自動的に取得するzsh-completionsが壊れるので、コマンドの構文を変更したりしません(エイリアス/関数を使用するなど)。 編集:私が正しいと答えを選ばなかった理由は、上記の条件を満たした答えが与えられなかったからです。 私はZSHを使用していますが、他のシェルでの回答も受け入れられます。
37 shell  zsh 

7
切断後にシェルを回復する方法
リモートCentOS 5.6マシンでいくつかの作業を行っていますが、私のネットワークはドロップし続けます。再接続後にハングしたセッションを回復する方法はありますか? 編集:yumでいくつかのアップデートとインストールを行っており、プロセスが何をしていてもハングしている場合、これが問題になるかもしれないと心配しています。

5
検索を使用して複数のファイルの名前を変更する方法
コマンドfindコマンドを使用して複数のファイル(file1 ... filenからfile1_renamed ... filen_renamed)の名前を変更したい: find . -type f -name 'file*' -exec mv filename='{}' $(basename $filename)_renamed ';' しかし、このエラーが発生する: mv: cannot stat ‘filename=./file1’: No such file or directory ファイル名がシェル変数として解釈されないため、これは機能しません。
37 shell  find 

1
bash / shellスクリプトでlikeのようなUTF-8文字を使用する必要がありますか?
ここでの単純なコードは、次のコマンドで起動した場合、私のマシンで期待どおりに機能しbashます。 function ⏰(){ date } ⏰ これを使用している他の人に問題がありますか、それとも普遍的ですか? 私は今のところ他のソースコードでこのようなものを見たことがないので、疑問に思っています。 編集:無限の可能性があります。たとえば、機能の役割を絵文字の使用などですばやく区別するために使用できます。 ファイルを変更または削除できるものの場合は💣、進行中の作業の場合はinteractive、対話型メニューの場合は... そのすべての標準を作成する必要があると思いますが、興味深いアイデアのようです。 5文字までのランダムな行は、コードが何をしているのかを理解するのに役立ちます。(もちろん、それらの読み方を学ぶ必要があります。) さらなる編集:試してみる。今のところ、エディターですべての関数を折り畳むと(またはcat myscript.sh|grep function)このようになります。(私のユニコードはgeany、ここに比べて、または私の端末でずっと良く見えます。) function ⬚_1(){ function ⬚⬚_2(){ function ⬚⬚⬚_📃_D(){ function ⬚⬚⬚⬚_📃_X(){ function ⬚⬚⬚⬚⬚_📃_Y(){ function ⬚⬚⬚⬚⬚⬚_❓_P(){ function ⬚⬚⬚⬚_📃_Z(){ function ⬚⬚⬚⬚⬚_❓_U(){ function ⬚⬚⬚⬚⬚_❓_O(){ 奇妙なインデント⬚を使用して、関数の相互関係を示し、記号📃/❓を使用して、それぞれの役割を明確に区別しています。(もちろん、これらは私の実際の関数名ではありません。最後にランダムな文字を付けただけですが、それらがなくても関係を明確に見ることができます。)
36 bash  shell  unicode 

3
可変コンテンツを読み取るよりもファイルを開くのが速いのはなぜですか?
ではbashスクリプト私はからのさまざまな値必要な/proc/ファイルを。今までは、そのようにファイルを直接grepする数十行がありました。 grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo それをより効率的にするために、ファイルの内容を変数に保存し、それをgrepしました: a=$(</proc/meminfo) echo "$a" | grep -oP '^MemFree: *\K[0-9]+' ファイルを複数回開くのではなく、一度開くだけで変数の内容をgrepする必要があります。 bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null real 0m0.803s user 0m0.619s sys 0m0.232s bash 4.4.19 $ a=$(</proc/meminfo) bash 4.4.19 $ time for i in {1..1000};do echo "$a"|grep ^MemFree; done …

2
bashスクリプトに.shまたは.bash拡張子を使用しますか?
(Ubuntu-OSXの互換性と使いやすさとPOSIXについては、#!/ bin / shまたは#!/ bin / bashを使用してください) スクリプトでbashシェルを使用する場合、.bash拡張子を使用すると実際にbashが呼び出されるのか、それともシステム構成/最初のシェバン行に依存するのか。両方が有効であるが異なる場合、どちらが優先されますか? スクリプトを.shで終了して「シェルスクリプト」を示すだけで、最初の行でbashシェルを選択する#!/usr/bin/env bashか(例)、または.bashで終了するだけでなく(行1の設定も) )。bashを呼び出したい。
36 bash  shell  shebang 


3
これはbashスクリプトでより慣用的です: `|| true`または `|| : `?
私はあまりシェルスクリプトを実行しないので、ドキュメントをgit submodule読んでいて、このドキュメントで使用されている構文を見たときは少し驚いていました。 サブモジュールのコマンドからゼロ以外の値が返されると、処理が終了します。これ|| :は、コマンドの最後に追加することでオーバーライドできます。 || :コマンドを強制的に正常に終了させるための略記である、検索する必要がありました。コマンドを正常に終了する必要があるときはいつでも、を使用しました|| true。され|| :、より慣用的であると考えられて?
36 bash  shell 

4
シェルスクリプトの「sudo su」がスクリプトの残りをルートとして実行しないのはなぜですか?
サンプルスクリプトは次のようになります。 #!/bin/bash sudo su ls /root ./test.sh通常のユーザーとして使用する場合、代わりにlsスーパーユーザーとして実行して終了し、ルートに切り替えます。ログアウトするls /rootと、通常のユーザーとして実行されます。 誰かがそれについてのメカニズムについて教えてもらえますか?
36 shell  shell-script  sudo  root  su 

9
シェルからの「Hollywood-hacker-scene」の出力
これは奇妙な質問のように思えるかもしれませんが、典型的なハリウッドのハッキングシーンを作成するために何を使用しますか? 友人からこのリクエストを受け取りましたが、私の脳は空でした。私が考えることができたのは、マトリックスなどの映画のすべてのnmapシーンだけでした。 しかし、これはデフォルトのOSXを搭載したMacで実行する必要があります。これは* nixのフレーバーだと思いますか?彼らはインターネットにアクセスできないため、外部ツールを使用した準備は問題外です。 多分スクリーンに/ var / log / messagesに相当するものを書くことに沿って考えていました...
36 shell 

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