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

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

1
Linuxでの「ln -sf」の意味は何ですか?
2つの質問があります。1つ目は-sfオプション用で、2つ目はオプションのより具体的な使用法です-f。 グーグルで、コマンドln、オプション-s、およびの説明を見つけました-f。 (http://linux.about.com/od/commands/l/blcmdl1_ln.htmからコピー) -s, --symbolic : make symbolic links instead of hard links -f, --force : remove existing destination files これらのオプションは個別に理解しています。しかし、これ-sと-fオプションを同時に使用する方法はありますか?-sリンクファイルの作成に使用され、リンクファイルの-f削除に使用されます。この状況と、この統合オプションを使用する理由を理解できません。 lnコマンドの詳細を知るために、いくつかの例を作成しました。 $ touch foo # create sample file $ ln -s foo bar # make link to file $ vim bar # check how link file works: foo file …
21 shell  ln 

5
ディレクトリ内の隠しファイルと*を一致させる方法
指定されたディレクトリ内の隠しファイルを一致させる方法 例えば 以下のコマンドを指定しても、隠しファイルの結果は表示されません。 du -b maybehere*/* 使用する代わりに単一のコマンドを使用してこれを簡単に達成する方法 du -b maybehere*/.* maybehere*/* 多分ここに2回入力する必要があるので。

3
シェルからアプリケーションを「正しく」起動する方法
質問を正確に表現するのは難しいと思いますが、最善を尽くします。dwmデフォルトのウィンドウマネージャーとして使用し、dmenu私のアプリケーションランチャーとして。ブラウザ以外のGUIアプリケーションはほとんど使用しません。私の作業のほとんどは、コマンドラインから直接行われます。さらに、私はオペレーティングシステム、アプリケーションなどに関するミニマリズムの大ファンです。私が取り除けなかったツールの1つは、アプリケーションランチャーでした。主に、アプリケーションランチャーの動作/動作について正確に理解していないためです。大規模なインターネット検索でも、あいまいな説明しか表示されません。私がやりたいのは、アプリケーションを実際に生成すること以外はまったく使用できないため、アプリケーションランチャーを削除することです。これを行うには、シェルからアプリケーションを「正しく」起動する方法を知りたいと思います。これにより、「正しく」の意味は「アプリケーションランチャーが行うように」に近似できます。 シェルからプロセスを生成する次の方法について知っています。 exec /path/to/Program 新しいプロセスを作成せずに、指定されたコマンドでシェルを置き換えます sh -c /path/to/Program シェル依存プロセスを起動する /path/to/Program シェル依存プロセスを起動する /path/to/Program 2>&1 & シェルに依存しないプロセスを起動する nohup /path/to/Program & シェルに依存しないプロセスを起動し、出力を nohup.out 更新1:さまざまな条件下でのdmenu繰り返し呼び出しからの再構築などを説明できps -eflます。新しいシェル/bin/bashと、このシェルの子としてアプリケーションが生成されます/path/to/Program。子供が周りにいる限り、シェルは周りにあります。(これを管理する方法は私を超えています...)対照的にnohup /path/to/Program &、シェルから発行する場合/bin/bash、プログラムはこのシェルの子になりますが、このシェルを終了すると、プログラムの親が最上位のプロセスになります。したがって、最初のプロセスがたとえば/sbin/init verbose、それがあった場合、それはPPID 1プログラムの親になります。ここで私は、グラフを使って説明しようとしたものです:chromium経て発足したdmenu、firefox使用して開始されましたexec firefox & exit。 systemd-+-acpid |-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper | | `-chromium---5*[chromium-+-{Chrome_ChildIOT}] | | |-{Compositor}] | | |-{HTMLParserThrea}] | | |-{OptimizingCompi}] | | `-3*[{v8:SweeperThrea}]] | |-chromium | |-chromium-+-chromium …
21 shell  exec 

4
「IFS」とは何ですか?
私はこのスレッドを読んでいました:ファイルの行をループする方法は? なにIFS?そして、for-loopsのコンテキストでの使用法は何ですか?
21 bash  shell 


6
最初のxファイルを移動する方法
数千の無秩序なファイルがあるこの巨大なフォルダーがあります。mvコマンドを使用して最初の5000をサブフォルダーに移動することは可能ですか?今のところ私はファイルを mv *some_pattern* ./subfolder1/ 今のところ、画像を非常にランダムに移動していますが、各サブフォルダーに正確に5000個のファイルがない場合、それはそれほど重要ではありません。それを行うためのより良い方法はありますか?



3
シェルコマンドを使用してすべての行に行番号を追加するにはどうすればよいですか?
私のファイル、 PSS-A (Primary A) PSS-B (Primary B) PSS-C (Primary C) PSS-D (Primary D) PSS-E (Primary E) PSS-F (Primary F) PSS-G (Primary G) PSS-H (Primary H) PSS-I (Primary I) SPARE (SPARE) 出力ファイル、 1> PSS-A (Primary A) 2> PSS-B (Primary B) 3> PSS-C (Primary C) 4> PSS-D (Primary D) 5> PSS-E (Primary …

4
プログラムを呼び出すときに現在の作業ディレクトリを設定するPOSIX(または少なくとも一般的な)ユーティリティはありますか?
我々は持っているENV(1)私たちは(例えば実行するコマンドの環境を変更することをenv MANPAGER=more man dtrace)。同様のものがありますが、コマンドを開始するディレクトリを変更しますか? 理想的には、次のようになります。 theMagicCommand /new/cwd myProgram このように、他のenv(1)のようなコマンドで「連鎖」させることができます。たとえば、 daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram これまでのところ、残念ながらenv(1)と同じインターフェースを持たない次のソリューションを考えることができます。 cd /new/cwd && myProgram また、次のような単純なシェルスクリプトを作成することもできます。 #! /bin/sh - cd "${1:?Missing the new working directory}" || exit 1 shift exec "${@:?Missing the command to run}" しかし、私はすでに存在するものを探しています(少なくともmacOSとFreeBSDで)。 myProgram必ずしもデスクトップアプリケーションではありません(この場合、.desktopファイルでPathキーを使用できます)。
20 shell  freebsd  cwd 

1
「#!/ bin / sh -a」の-aがsedに影響し、「set -a」が影響しないのはなぜですか?
次の.shファイルを実行した場合: #!/bin/sh -a echo "a" | sed -e 's/[\d001-\d008]//g' 結果はエラーです: sed:-e expression#1、char 18:無効な範囲終了 しかし、次の.shファイルを実行すると: #!/bin/sh set -a echo "a" | sed -e 's/[\d001-\d008]//g' エラーなしで実行されます。2番目のコードは最初のコードと同等であると想定されていませんか?最初のエラーはなぜですか?

2
`command 1> file.txt 2> file.txt`の動作が` command 1> file.txt 2>&1`と異なるのはなぜですか?
stdoutとstderrの両方を同じファイルにリダイレクトする場合、、command 1>file.txt 2>&1またはを使用してリダイレクトできますcommand &>file.txt。しかし、なぜcommand 1>file.txt 2>file.txt上記の2つのコマンドと動作が異なるのですか? 以下は検証コマンドです。 $ cat redirect.sh #!/bin/bash { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1 { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt { echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt { echo -e …

3
エイリアスまたは関数を介して、シェルで実際に実行されたコマンドを確認するにはどうすればよいですか
たとえば、bash関数(またはエイリアス)がありますfunction install() {sudo apt-get install $@}。コマンドを実行install dicelabすると、実際に実行されると予想されsudo apt-get install dicelabます。シェルによって実際に実行された内容はどこで確認できますか?私のより複雑なエイリアスが期待どおりに機能することを確認したいと思います。
20 bash  shell  debugging 

2
高度に投票されたワンライナーのネストされた二重引用符
3.5Kを超える票を含むStackOverflowの回答にDIRは、現在のbashスクリプトのディレクトリに割り当てるためのこの1つのライナーが含まれています。 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ネストされた二重引用符に困惑しています。私が知る限り、次のフラグメントは二重引用符で囲まれています。 "$( cd " "${BASH_SOURCE[0]}" " && pwd )" ...そして、=($( dirnameおよび))の右側にある他のものはすべて引用符で囲まれていません つまり、2番目、4番目、および6 "番目の"文字は、それぞれ1番目、3番目、および5 番目の文字を「閉じる」と仮定します。 二重引用符で"${BASH_SOURCE[0]}"何が達成されるのか理解していますが、他の2組の二重引用符の目的は何ですか? 一方、(および高い得点にもかかわらず)上記のスニペットが正しくない場合、名目上の意図を達成する正しい方法は何ですか? (名目上の意図ではpwd、最初にcd-ingの後に返された値をで返されたディレクトリに収集dirname "${BASH_SOURCE[0]}"し、cdサブシェルで-ing を実行し$PWD、親シェルのが変更されないようにします)。

3
`<&-`は何をしますか?
Bashのスニペットをコピーして、リモートで実行されるsshコマンドをバックグラウンド化しました。 ssh user@remote &lt;&lt;CMD some process &lt;&amp;- &gt;log 2&gt;error &amp; CMD 何を&lt;&amp;-するの? 私の推測では、それは同じです&lt; /dev/null 私の次の理解では、三つの主要なファイルディスクリプタが(ということでstdin、stdout、stderr)を防止するためにクローズする必要があります。 ジョブがバックグラウンドになり、スクリプトが終了します-どういうわけか競合しますか? ターミナルを閉じると、ターミナルからstdinを受け入れているすべてのプロセスが閉じられますか?

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